# 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 ### Overall structure ``` | + + + | + | + + + + | + ... + | + + | + ... ``` ### Statement Meta Extern Function `@extern fun (: ? (, ? )*)? (-> ? )?` ``` @extern sum fun: num1 sint32, num2 sint32 -> sint32 ``` ### Statement Variable ` <- ` ### Statement Function ` fun (: ? (, ? )*)? (-> ? )? ;` ``` stuff fun ; stuff fun -> sint32 ret 42 ; stuff fun: num1 sint32, num2 sint32 -> sint32 ret num1 + num2 ; ``` ### 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 ( (, ? )?)? ;` ### Statement Return `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 `( )* ( ?)? !`