我需要手动编写解析器。不能在LL(*)和LR之间做出选择(也许可以试试Earley?)。我应该使用自下而上的解析,因为LL的语法会相当困难吗?
答案 0 :(得分:2)
我会使用递归下降解析器,也可以使用尾递归下降解析器(即LL)或自上而下的运算符优先级解析器。
LR系列的解析器,无论是LR,LALR(k),LALR(1),GLR还是其他什么东西都太“怪异”了。如果您尝试编写其中一个,那么通常最终会实现一个解析器生成器 ,只是为了保持理智。
答案 1 :(得分:0)
这取决于您尝试使用的语法。 LL在语法上有一些不确定性的问题(你必须让所有的东西都免费)。
如果您无法决定,请使用LR(1)或LALR。甚至可能是GLR。
答案 2 :(得分:0)
试试XText。这是给你的。快速轻松地创建语言,解析器和编辑器
答案 3 :(得分:0)
手工编写的最简单类型的解析器是递归下降解析器,它位于LL解析器的族中。大多数其他类型的解析器要么难以手工编写(LALR解析器,它使用大型状态转换表),要么用于解析复杂语言(例如用于解析自然语言的Earley解析器)。
wikipedia有一些关于递归下降解析的好信息。