ref: f0adf4345753abac945bc9b57b4958c70dce766e
dir: /examples/dcv.peg/
Stmt = SPACE Expr EOL { printf("%d\n", pop()); } | (!EOL .)* EOL { printf("error\n"); } Expr = ID { var= yytext[0] } ASSIGN Sum { vars[var - 'a']= top(); } | Sum Sum = Product ( PLUS Product { int r= pop(), l= pop(); push(l + r); } | MINUS Product { int r= pop(), l= pop(); push(l - r); } )* Product = Value ( TIMES Value { int r= pop(), l= pop(); push(l * r); } | DIVIDE Value { int r= pop(), l= pop(); push(l / r); } )* Value = NUMBER { push(atoi(yytext)); } | < ID > !ASSIGN { push(vars[yytext[0] - 'a']); } | OPEN Expr CLOSE NUMBER = < [0-9]+ > SPACE ID = < [a-z] > SPACE ASSIGN = '=' SPACE PLUS = '+' SPACE MINUS = '-' SPACE TIMES = '*' SPACE DIVIDE = '/' SPACE OPEN = '(' SPACE CLOSE = ')' SPACE SPACE = [ \t]* EOL = '\n' | '\r\n' | '\r' | ';'