%{ using namespace std; #include #include extern int line_num; void yyerror(char*); int yylex(); %} %token WITH_tok %token PERIOD_tok %token PIZZA_tok %token SANDWICH_tok %token ICE_CREAM_tok %token AND_tok %token PEPPERONI_tok %token CHEESE_tok %token CHOCOLATE_SAUCE_tok %token PINEAPPLE_tok %% lunch : item WITH_tok topping_list PERIOD_tok; item : PIZZA_tok | SANDWICH_tok | ICE_CREAM_tok ; topping_list : topping_list AND_tok topping | topping ; topping : PEPPERONI_tok | CHEESE_tok | CHOCOLATE_SAUCE_tok | PINEAPPLE_tok ; %% void yyerror(char* s) { cerr << "parse error on line " << line_num << endl; exit(1); }