ref: 0d0ea3d6a657f327e65df3999140da99f3376937
dir: /examples/dc.peg/
# Grammar Expr = SPACE Sum EOL { printf("%d\n", pop()); } | (!EOL .)* EOL { printf("error\n"); } 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)); } | OPEN Sum CLOSE # Lexemes NUMBER = < [0-9]+ > SPACE PLUS = '+' SPACE MINUS = '-' SPACE TIMES = '*' SPACE DIVIDE = '/' SPACE OPEN = '(' SPACE CLOSE = ')' SPACE SPACE = [ \t]* EOL = '\n' | '\r\n' | '\r'