%{ #include int ctr = 0; %} %union{ int ival; } %token ID RP %token LP %% str : LP {$1 = ctr++; printf("starting level %d\n",$1);} str_body RP {printf("ending level %d\n",$1);} ; str_body: ID str_body | LP {$1 = ctr++; printf("starting level %d\n",$1);} str_body RP {printf("ending level %d\n",$1);} str_body | ; %% main() { printf("Input a balanced parenthesis/ID string: \n"); printf(" (example: ( a b (c ) (d e)) \n"); yyparse(); }