有人可以帮助我为嵌套 if 语句编写正确的语法规则吗?用我的语言,我可以写出这样的结构:
(IF CONDITION)
some statements
(IF CONDITION)
some statements
(ELSE IF CONDITION)
some statements
(ELSE IF CONDITION)
some statements
(ELSE IF CONDITION)
some statements
(ELSE)
some statements
(END)
some statements
(ELSE IF CONDITION)
some statements
(ELSE)
some statements
(END)
我写了词法分析器,所以左右括号是RULE_OPEN
和RULE_CLOSE
标记,“IF”是IF
标记,“END”是END
标记,“ELSE”是ELSE
标记,“CONDITION”是CONDITION
标记。
假设“某些语句”可能是我的语言中允许的任何内容(如通用编程语言)。重要的是可以无限嵌套 IF 语句。
希望这很清楚,如果我解释得不好,请告诉我。
不管我怎么努力。我总是遇到移位/减少冲突,解析器不接受正确的输入。
尽管如此,我已经成功地编写了没有 else-if 的规则。当我为 else-if 添加规则时,代码对我来说开始变得非常复杂。
以下是我没有 else-if 部分的成功方法(我只列出了相关规则):
statements: statement
statements: statements statement
statement: code
| data_out
| rule
rule: inline_if_statement
| block_if_statement
block_if_statement: RULE_OPEN IF CONDITION RULE_CLOSE statements RULE_OPEN END RULE_CLOSE
block_if_statement: RULE_OPEN IF CONDITION RULE_CLOSE statements block_else_statement
block_else_statement: RULE_OPEN ELSE RULE_CLOSE statements RULE_OPEN END RULE_CLOSE
block_else_statement: empty
empty :
我认为这是解析中非常常见的问题,我希望这里有人已经解决了它:-) 感谢您的帮助!