2010-11-23 46 views
0

我需要手动编写解析器。无法选择LL(*)和LR(可能试试Earley?)。我是否应该使用自下而上的解析方式,因为LL的语法会比较困难?书写手动解析器

+2

它很大程度上取决于您尝试分析哪种语言。没有关于你的申请的更多信息,就不可能提供任何合理的建议。您可能还想看看“相关”问题(向下滚动并查看右侧)。这里有很多关于解析的问题,还有很多很好的讨论。 – 2010-11-23 21:02:52

+0

你为什么需要*手动编写解析器?这通常没有太多的价值。 – 2010-11-23 21:43:00

+0

我不能使用yacc或其他解析器,我的解析器将在其中工作 – mystdeim 2010-11-24 10:47:08

回答

0

这取决于您尝试使用的语法。 LL在语法上存在一些不确定性的麻烦(你不得不使所有的东西都是左递归)。

如果您不能决定,请使用LR(1)或LALR。甚至可能是GLR。

0

尝试XText。这是给你的。快速简单地创建语言,解析器和编辑器

0

手动编写的最简单的解析器类型是递归下降解析器,该解析器位于LL解析器系列中。大多数其他类型的解析器都很难手工编写(LALR解析器,它使用大型状态转换表),或者用于解析复杂语言(例如用于解析自然语言的Earley解析器)。

wikipedia有关于递归下降解析的一些很好的信息。

2

我会用递归下降解析器或者可能是尾递归下降解析器(即LL)或自顶向下运算符优先解析器。

解析器的LR族,无论是LR,LALR(k),LALR(1),GLR还是别的都太过“怪异”了。如果你试图编写其中的一个,你通常最终会实现一个解析器生成器,无论如何,只是为了保持理智。