假设我有一种语言设计。在选择“适当的”解析器/框架(javacc,antlr,spark,mps ...)时需要考虑的标准是什么,如性能,测试生成,IDE支持....
我知道,“正确”取决于很多变量,但我只对标准列表感兴趣(之后我会加权),我可以根据这些标准做出决定。
任何输入的Thx!
答案 0 :(得分:1)
这种决定最重要的输入可能是语言的复杂性。不同的解析器生成器能够处理不同类别的语言。
由于您的语言可能是context-free language(否则您可以使用正则表达式或者您可以接受相当大的挑战),您通常会在LR解析器之间做出决定(或其一些变体)和LL解析器。作为一个(简化的!)经验法则,LR解析器能够解析更复杂的语言,而LL解析器更直观,更容易理解。
我认为重要的其他标准是:
答案 1 :(得分:0)
LALR(1)解析器可以非常快,因为它们可以基于预编译的表,但是单字符前瞻可以限制你的语法。一个很好的例子是GOLD Parser。有许多引擎可供选择,即使它已经老了,如果你只用BNF来描述你的语法,它会相当快。