%{ #include void rule_number( int ); extern int yylex(void); extern int yyerror(char *); %} %token ID %% start : expr '#' { rule_number( 1 ); YYACCEPT; } ; expr : term { rule_number( 2 ); } | expr '+' term { rule_number( 3 ); } | expr '-' term { rule_number( 4 ); } ; term : ID { rule_number( 5 ); } | '(' expr ')' { rule_number( 6 ); } ; %% int main() { fprintf( stderr, "Enter your expression:\n" ); yyparse(); return 0; } void rule_number( int n ) { fprintf( stdout, "Rule number %2d\n", n ); } int yyerror( char *s ) { fprintf( stderr, "--%s--\n", s ); return 0; }