# 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'