%{ #include #include void yyerror( const char *msg); /* called for parser syntax error */ int yylex( void); /* declare to avoid gcc warnings */ %} %token INTEGER %start expression %% primary_expression: INTEGER { printf( "\tpush %d\n", $1); } | '(' expression ')' ; multiplicative_expression: primary_expression | multiplicative_expression '*' primary_expression { printf( "\top: *\n"); } ; additive_expression: multiplicative_expression | additive_expression '+' multiplicative_expression { printf( "\top: +\n"); } ; expression: additive_expression ; %% int main( int argc, char *argv[]) { return yyparse(); }