v3 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 := 'let' '{' DECL { ';' DECL } '}' 'in' EXPR2 | EXPR2 [ 'where' '{' DECL { ';' DECL } '}' ]

EXPR2 := 'if' EXPR1 'then' EXPR1 'else' EXPR1 | '{' EXPR1 { ';' EXPR1 } '}' | EXPR3

EXPR3 := EXPR4 { '||' EXPR4 }

EXPR4 := EXPR5 { '&&' EXPR5 }

EXPR5 := EXPR6 { ( '==' | '!=' ) EXPR6 }

EXPR6 := EXPR7 { ( '<' | '<=' | '>' | '>=' ) EXPR7 }

EXPR7 := EXPR8 { '++' | EXPR8 }

EXPR8 := EXPR9 { ( '+' | '-') EXPR9 }

EXPR9 := EXPR10 { ( '*' | '/' ) EXPR10 }

EXPR10 := EXPR11 | ( '!' | '+' | '-' ) EXPR10

EXPR11 := EXPR12 { 'o' EXPR12 }

EXPR12 := EXPR13 { EXPR13 }

EXPR13 := '(' EXPR1 ')' | '(' ( '||' | '&&' | '==' | '!=' | '<' | '<=' | '>' | '>=' | '++' | '+' | '-' | '*' | '/' ) ')' | '(' ')' | IDENTIFIER [ '.' IDENTIFIER ] | '' IDENTIFIER { IDENTIFIER } '->' EXPR1 | CONSTANT_CHAR | CONSTANT_INTEGER | 'true' | 'false' | CONSTANT_INTEGER

⚠️ **GitHub.com Fallback** ⚠️