simple.grammar (1350B)
1 program = 2 | $eof 3 | declaration program 4 ; 5 6 declaration = 7 | variable-declaration 8 | function-declaration 9 ; 10 11 variable-declaration = 12 | ident ':' type '=' expr ';' 13 ; 14 15 function-declaration = 16 | ident '::' '(' [ parameter-list ] ')' ':' type block-statement 17 ; 18 19 parameter-list = 20 | parameter 21 | parameter ',' parameter-list 22 ; 23 24 parameter = 25 | ident ':' type 26 ; 27 28 statement-list = 29 | statement 30 | statement statement-list 31 ; 32 33 statement = 34 | block-statement 35 | decl-statement 36 | expr-statement 37 | if-else-statement 38 | while-statement 39 | ret-statement 40 ; 41 42 block-statement = 43 | '{' [ statement-list ] '}' 44 ; 45 46 decl-statement = 47 | ident ':' type '=' expr ';' 48 ; 49 50 expr-statement = 51 | expr ';' 52 ; 53 54 if-else-statement = 55 | 'if' '(' expr ')' statement [ 'else' statement ] 56 ; 57 58 while-statement = 59 | 'while' '(' expr ')' statement 60 ; 61 62 ret-statement = 63 | 'return' ident ';' 64 ; 65 66 ident = 67 | ? c-style identifier ? 68 ; 69 70 type = 71 | 'u8' 72 | 'u16' 73 | 'u32' 74 | 'u64' 75 | 's8' 76 | 's16' 77 | 's32' 78 | 's64' 79 | 'f32' 80 | 'f64' 81 | 'c8' 82 ; 83 84 expr = 85 | ident 86 | literal 87 | assignment 88 | binary-op 89 ; 90 91 assignment = 92 | ident '=' expr 93 ; 94 95 binary-op = 96 | expr expr binary-operator 97 ; 98 99 binary-operator = 100 | '+' 101 | '-' 102 | '*' 103 | '/' 104 ; 105 106 literal = 107 | integer-literal 108 ; 109 110 integer-literal = 111 | ? c-style integer literal ? 112 ;