v1 grammar - graeme-lockley/experiment-safe-language GitHub Wiki
MODULE := { IMPORT } { DECL } [ EXPR1 ]
IMPORT := 'import' CONSTANT_URL 'as' IDENTIFIER ';'
DECL := IDENTIFIER+ '=' EXPR1 [ 'assumptions' '{' EXPR1 { ';' EXPR1 } ] ';'
EXPR1 := 'if' EXPR1 'then' EXPR1 'else' EXPR1 | '{' EXPR1 { ';' EXPR1 } '}'
EXPR2 := EXPR3 { '||' EXPR3 }
EXPR3 := EXPR4 { '&&' EXPR4 }
EXPR4 := EXPR5 { ( '==' | '!=' ) EXPR5 }
EXPR5 := EXPR6 { ( '<' | '<=' | '>' | '>=' ) EXPR6 }
EXPR6 := EXPR7 { '++' | EXPR7 }
EXPR7 := EXPR8 { ( '+' | '-') EXPR8 }
EXPR8 := EXPR9 { ( '*' | '/' ) EXPR9 }
EXPR9 := EXPR10 | ( '!' | '+' | '-' ) EXPR9
EXPR10 := EXPR11 { 'o' EXPR11 }
EXPR11 := EXPR12 { EXPR12 }
EXPR12 := '(' EXPR1 ')' | '(' ( '||' | '&&' | '==' | '!=' | '<' | '<=' | '>' | '>=' | '++' | '+' | '-' | '*' | '/' ) ')' | '(' ')' | IDENTIFIER [ '.' IDENTIFIER ] | '' IDENTIFIER { IDENTIFIER } '->' EXPR1 | CONSTANT_CHAR | CONSTANT_INTEGER | 'true' | 'false' | CONSTANT_INTEGER