解析器选择的标准

时间:2017-05-18 13:33:06

标签: parsing antlr javacc

假设我有一种语言设计。在选择“适当的”解析器/框架(javacc,antlr,spark,mps ...)时需要考虑的标准是什么,如性能,测试生成,IDE支持....

我知道,“正确”取决于很多变量,但我只对标准列表感兴趣(之后我会加权),我可以根据这些标准做出决定。

任何输入的Thx!

2 个答案:

答案 0 :(得分:1)

这种决定最重要的输入可能是语言的复杂性。不同的解析器生成器能够处理不同类别的语言。

由于您的语言可能是context-free language(否则您可以使用正则表达式或者您可以接受相当大的挑战),您通常会在LR解析器之间做出决定(或其一些变体)和LL解析器。作为一个(简化的!)经验法则,LR解析器能够解析更复杂的语言,而LL解析器更直观,更容易理解。

我认为重要的其他标准是:

  • 理解和调试生成的解析器/解析器生成过程本身是多么容易
    • 这可能会有利于LL parsers,因为他们通常更容易理解为外行人
  • 性能

答案 1 :(得分:0)

LALR(1)解析器可以非常快,因为它们可以基于预编译的表,但是单字符前瞻可以限制你的语法。一个很好的例子是GOLD Parser。有许多引擎可供选择,即使它已经老了,如果你只用BNF来描述你的语法,它会相当快。