# Detailed Syntax This documents specifies what is the allowed syntax for statements and expressions. ### Symbols used `?` 0 or 1 instances `*` 0 or more instance `+` 1 or more instances `` Terminal token, usually new line , but it can also sometimes be `,`, `else`, or `;` `` New line `` Identifier `` Expression block `` Statements block `` Expression `` Statement ### Statement Function ` fun (: ? (, ? )*)? (-> ? )? ; ` ``` stuff fun ; stuff fun -> sint32 ret 42 ; stuff fun: num1 sint32, num2 sint32 -> sint32 ret num1 + num2 ; ``` ### Statement Meta Extern Function: `@extern fun (: ? (, ? )*)? (-> ? )? ` ``` @extern sum fun: num1 sint32, num2 sint32 -> sint32 ``` ### Statemnet Variable ` <- ` ``` num sint32 <- 42 ``` ### Statement Assignment ` <- ` ``` num1 <- 5 ``` ### Statement Block ( )* ### Statement Expression ### StatementLoop `loop [ | ] (, ? (, ? )?)? ;` ``` loop i sint32 <- 0, true, i < 10 doStuff(i) ; loop i sint32 <- 0, true, i < 10 doStuff(i) ; loop i sint32 <- 0, true, i < 10 doStuff(i) ; ``` `loop ( (, ? )?)? ;` ### StatementReturn `ret ` ### ExpressionVariable: `` ### Expression If Else: `if : ` ``` if num1 > 10: putchar('T') ``` `if : ;` ``` if num1 > 10: num1 <- 500 putchar('S') ; ``` `if : else ` ``` if num1 > 10: putchar('T') else putchar('N') ``` `if : else ;` ``` if num1 > 10: putchar('T') else putchar('N') ; ``` `if : else ;` ``` if num1 > 10: putchar('T') else num1 <- 500 putchar('F') ; ``` ### Expression Block `( )* ( ?)? !`