%{ /* definitions */ #include <stdio.h> int yylex(); int yyerror(char *); %} %locations %define api.pure %token eol round_open round_close multiply space %token single_digit_integer multi_digit_integer invalid %type <integer>number %type <integer>single_digit_integer %type <integer>multi_digit_integer %union{ int integer; } /* rules section below */ %% input: s; s: round_open multiply round_close { printf("0\n"); } | round_open multiply space number round_close { printf("%d\n", $4); } | round_open multiply space number space number round_close { printf("%d\n", $4 * $6); } ; number: single_digit_integer | multi_digit_integer ; %% int yyerror(char* s){ printf("%s\n", s); return 0; } //driver int main(int argc, char** argv){ printf("hello, world!\n"); yyparse(); return 0; }