%{ #include #define YYERROR_VERBOSE void yyerror(char *); %} %verbose %token IF THEN ELSE EXPR ILLEGAL_CHAR %% /* Dies ist die Lösung aus Kap. 5.3, Folie 26. */ statement: unbalanced_st | balanced_st ; unbalanced_st: IF EXPR THEN statement | IF EXPR THEN balanced_st ELSE unbalanced_st ; balanced_st: IF EXPR THEN balanced_st ELSE balanced_st | other ; other: EXPR ; %% void yyerror(char *msg) { printf("\n%s\n", msg); } int main() { return yyparse(); }