# 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 `` New line `` Identifier `` Type ### 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 Repeat `rep [ | ]? : ` `rep [ | ]? : ;` `rep [ | ] (, ? (, ? )? )? : ` `rep [ | ] (, ? (, ? )? )? : ;` `rep ( (, ? )? )? : ` `rep ( (, ? )? )? : ;` ``` rep i sint32 <- 0, true, i < 10: doStuff(i) ; rep i sint32 <- 0, true, i < 10: doStuff(i) ; rep i sint32 <- 0, true, i < 10: doStuff(i) ; rep: infiniteCall() ``` ### Statement Return `ret ?` ### Expression Variable `` ### 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 ` )* ?`