我很怀念,所以我决定写一个冒险游戏创作者,允许用户输入复杂的句子。
我已经手动滚动了一个使用访问者模式的词法分析器和解析器,它工作得很好,直到我遇到了我的 BNF(Backus-Naur 形式)规则之一的左递归问题:
object ::= {adjective} noun
| object AND {adjective} noun
按照这个 wiki 条目删除左递归后,这看起来正确吗?
object ::= {adjective} noun object2
object2 ::= AND {adjective noun}
| !Empty
编辑:
我按照此处给出的指南使用 C# 手动滚动词法分析器和解析器给出的指南使用 C# 手动滚动词法分析器和解析器。我没有为这个练习使用任何解析器生成器。
另外,我从这个网站获得了解析器的 BNF 规则。