我正在使用 JavaCUP 工具为我的语言生成解析器。我正在尝试编写一个匹配嵌套和多个 if_else 语句的语法。
输入文件
// matches
if ()
if ()
else
if ()
else
else
// no match -> modifying grammar leads to shift/reduce conflict
if ()
else
语法
expr ::= if_then_else_statement;
if_then_else_statement ::= IF LPAREN RPAREN if_then_else_statement ELSE if_then_else_statement
| ;
此语法匹配嵌套的 if_else 语句。但是它只识别我输入文件的第一个嵌套 if_else 语句。
我修改了我的语法以匹配多个这样的语句:
expr ::= expr if_then_else_statement;
| ;
if_then_else_statement ::= IF LPAREN RPAREN if_then_else_statement ELSE if_then_else_statement
| ;
结果是由空规则(我猜)引起的移位/减少冲突。如何修改它以支持嵌套和多个 if_else 语句而不使用优先级?