Simkin Script Grammar
This is a description of the Simkin grammar in EBNF format:
statement_list: (<statement>)*
statement: "if" "(" <expression> ")" <compound_statement> ["else" <compound_statement>]
| "while" "(" <expression> ")" <compound_statement>
| "return" <expression> ";"
| <id_list> [ ":" <id> ] "=" <expression> ";"
| <id_list> "(" <expression_list> ")" ";"
| ";"
expression_list: <expression> ( "," <expression> )*
expression: <expression> "or" <expression>
| <expression> "and" <expression>
| <expression> "=" <expression>
| <expression> "lt" <expression>
| <expression> "gt" <expression>
| <expression> "#" <expression>
| <expression> "+" <expression>
| <expression> "-" <expression>
| <expression> "/" <expression>
| <expression> "*" <expression>
| <expression> "%" <expression>
| "-" <expression>
| "not" <expression>
| <id_list> "(" <expression_list> ")" ";"
| <id_list> [ ":" <id> ]
| <string>
| <integer>
| <float>
| "(" <expression> ")"
id_list: <id> ( "." <id> )*
Here are the lexical tokens, described as regular expressions:
<integer>: "0" | (["1"-"9"] (["0"-"9"])*)
<string>: "\"" (~["\"","\\","\n","\r"] | "\\" (["n","t","b","r","f","\\","\'","\""] | ["0"-"7"] (["0"-"7"])? | ["0"-"3"] ["0"-"7"] ["0"-"7"]))* "\""
<float>: ((["0"-"9"])+ "." (["0"-"9"])* | (["0"-"9"])* "." (["0"-"9"])+) ("e" (["-","+"])? (["0"-"9"])+)?
<id>: ["@","$","A"-"Z","_","a"-"z"] ( ["@","$","A"-"Z","_","a"-"z"] | ["0"-"9"] )*