什么时候使用ANTLR这样的解析器比编写自己的解析代码更好?

问题描述 投票:6回答:3

我需要解析一个看起来像这样的简单DSL:

funcA Type1 a (funcB Type1 b) ReturnType c

由于我没有语法解析工具的经验,我认为自己编写一个基本的解析器(使用Java)会更快。

即使对于简单的DSL,对我来说使用ANTLR之类的东西并构造适当的语法定义也更好吗?

parsing antlr
3个回答
3
投票

简单的答案:编写描述语法的规则比编写接受语法描述语言的代码更容易。

如果您需要解析的唯一内容看起来与您在上面编写的内容完全一样,那么我想您可以手动编写。


4
投票

语法趋向于发展(与要求一样)。家用酿造解析器很难维护,并导致重新发明轮子示例。如果您认为可以用Java编写快速解析器,则应该知道,使用任何lex / yacc / compiler-compiler解决方案都会更快。词法分析器易于编写,因此您需要自己的规则优先级语义,这些语义不易于测试或维护。 ANTLR还提供了可视化AST的工具,您能否击败该伴侣。额外的优势是能够使用字符串模板生成中间代码,这是一个完全不同的方面。


2
投票

如果要开发和使用自定义语言,最好使用现成的解析器(生成器),例如ANTLR。当您的目标是编写解析器时,最好编写自己的解析器。

© www.soinside.com 2019 - 2024. All rights reserved.