编写手动解析器

时间:2010-11-23 20:40:12

标签: parsing ll lr earley-parser

我需要手动编写解析器。不能在LL(*)和LR之间做出选择(也许可以试试Earley?)。我应该使用自下而上的解析,因为LL的语法会相当困难吗?

4 个答案:

答案 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有一些关于递归下降解析的好信息。