/* File: else2a.y One way to fix the dangling else is to require the programmer to always use braces after THEN and ELSE. Note that statement has been replaced with stmt_block. Using mid-rule actions causes problems, though. */ %{ %} %token IF THEN ELSE %token FOO %token EXPR %% program : statement_list ; statement_list : statement_list statement | statement ; statement : if_stmt | other_stmt | stmt_block ; stmt_block : '{' statement_list '}' ; other_stmt : FOO ';' ; if_stmt : IF EXPR { /* do something */ } THEN stmt_block ELSE stmt_block { /* do something else */ } | IF EXPR {/* do something */ } THEN stmt_block {/* do something else */} ; %%