1 /* Grammar of a mini procedural programming language */
5 l = 'a'..'z'|'A'..'Z'|'_';
9 str = '"' (Any - '"')* '"';
10 blank = ' ' | '\n' | '\t';
18 {assign:} id '=' e ';' |
19 {print:} 'print' '(' e ')' ';' |
20 {print_str:} 'print' '(' str ')' ';' |
21 {println:} 'println' '(' ')' ';' |
22 {while:} 'while' '(' c ')' stmts |
23 {if:} 'if' '(' c ')' [then:]stmts else? ;
30 {add:} [left:]e '+' [right:]e2 |
31 {sub:} [left:]e '-' [right:]e2 |
34 {mul:} [left:]e2 '*' [right:]e3 |
35 {div:} [left:]e2 '/' [right:]e3 |
42 {read:} 'read' '(' ')' ;
45 {or:} [left:]c '||' [right:]c2 |
48 {and:} [left:]c2 '&&' [right:]c3 |
52 {eq:} [left:]e '=' [right:]e |
53 {ne:} [left:]e '!=' [right:]e |
54 {lt:} [left:]e '<' [right:]e |
55 {le:} [left:]e '<=' [right:]e |
56 {gt:} [left:]e '>' [right:]e |
57 {ge:} [left:]e '>=' [right:]e ;