%% S : A { printf("S -> A . B\n"); } B { printf("S -> A B .\n"); } ; A : 'a' { printf("A -> a . A\n"); } A { printf("A -> a A .\n"); } | { printf("A -> .\n"); } ; B : 'b' { printf("B -> b . B\n"); } B { printf("B -> b B .\n"); } | { printf("B -> .\n"); } ; %% #include int yylex() { char ch; // Skip newlines while ((ch = getchar()) == '\n') ; return ch; } void yyerror(char *s) { fprintf(stderr, "Error: %s\n", s); } int main() { return yyparse(); }