`?` 0 or 1 instances `*` 0 or more instance `+` 1 or more instances `` New line `` Identifier ### Statement Function ` fun (: ? (, )*)? (-> ? )? ;` ``` stuff fun ; stuff fun -> sint32 ret 42 ; stuff fun: num1 sint32, num2 sint32 -> sint32 ret num1 + num2 ; ``` ### Statement Assignment ` <- ` ``` num1 <- 5 ``` ### StatementBlock ( )* ### StatementExpression StatementFunction: fun (: (, )*)? (-> )? ; ### 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 ( (, ? )?)? ;` StatementMetaExternFunction: @extern fun (: (, )*)? (-> )? ### StatementReturn `ret ` ### Statemnet Variable ` <- ` ### 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 `( )* ( ?)? !`