首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么时候使用ANTLR之类的解析器比编写自己的解析代码更好?

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

Stack Overflow用户
提问于 2010-03-17 01:07:20
回答 3查看 1.3K关注 0票数 5

我需要解析一个简单的DSL,如下所示:

代码语言:javascript
复制
funcA Type1 a (funcB Type1 b) ReturnType c

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

即使对于一个简单的DSL来说,使用像ANTLR这样的东西并构造一个适当的语法定义会不会更好?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-17 01:22:54

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

如果你唯一需要解析的东西看起来和你上面写的一模一样,那么我会说你可以手写它。

更广泛地说,我会说大多数regular language可以更快地手工解析(使用正则表达式)。

如果您正在解析具有大量规则和结果的context-free language,则ANTLR (或其他解析器生成器)可以使工作变得更容易。

此外,如果您有一种简单的语言,并且希望将来变得更加复杂,那么将规则描述添加到ANTLR语法中将比将它们构建到手工编码的解析器中要容易得多。

票数 4
EN

Stack Overflow用户

发布于 2010-03-17 01:24:00

语法倾向于进化,(需求也是如此)。Home brew解析器很难维护,并导致重新发明轮子示例。如果您认为可以用java编写一个快速解析器,那么您应该知道使用lex/yacc/编译器-编译器解决方案会更快。词法分析器更容易编写,那么你会想要自己的规则优先语义,这不容易测试或维护。ANTLR也提供了一个可视化AST的ide,你能打败那个伙伴吗?附加的优点是能够使用字符串模板生成中间代码,这是完全不同的方面。

票数 4
EN

Stack Overflow用户

发布于 2010-03-17 01:23:24

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

除非您有编写解析器的丰富经验,并且能够以比使用ANTLR更快的方式获得一个工作的解析器。但我从你提出的问题中推测,这一退出条款并不适用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2456494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档