什么更好,ANTLR或JavaCC?

Jas*_*son 45 antlr javacc

关注的是文档/可学习性,eclipse集成,工具,社区支持和性能(大致按此顺序).

Wil*_*ger 28

有几种选择你不应该排除:

  • JParsec是一个解析器组合框架,允许您完全从代码构造解析器.
  • Scala的解析器组合框架解决了类似问题; 但是,Scala的语法使所有这些都更具可读性.
  • 然后还有John Metsker完成的解析器组合框架,用于他的书" 用Java构建解析器" ; 我不记得图书馆究竟在哪里,但它至少在互联网上漂浮着.它解决了同样的问题:您没有在单独的非Java文件中定义语法和标记定义; 相反,它都是Java.
  • Fortress,编程语言Sun已经开发多年了,现在似乎建立在这个工具包上:Rats.我没有太多的信息,但我认为如果他们将它用于他们的新编程语言,它可能有一些有趣的功能.

总的来说,我得到的印象是代码生成器的年代已经结束.如果我是你,我会使用Scala的解析器组合工具包.基本上,任何支持Scala的IDE也"支持"这个解析器组合框架.表现很好,AFAICT.

顺便说一句,ANTLR有一个相当不错的IDE支持,作为一个Eclipse插件(但也许在IntelliJ中也有一些东西 - 我不记得了.)所以,如果你选择经典的方法来定义你的词法分析器和解析器你认为,你的语言,ANTLR应该是你的选择.它是Java开发人员中最大的头脑,有工具支持,ANTLR的作者有一本很好的书.我不认为任何其他工具包可以声称.


Dan*_*iel 11

关于你提到的问题,我建议JavaCC是一个更好的选择.Java开发人员学习的速度更快,更容易(语法与普通Java非常相似),文档全面,Eclipse集成也足够.


jam*_*esh 10

ANTLR功能更全面:它是一个更加丰富的盒子编译器编译器 - lexing,解析,AST,树转换和代码生成.

对于JavaCC,它更像是一个Parser生成器而不是一个编译器编译器.AST支持是通过另一个名为JJTree的lib提供的.


Cha*_*tin 8

首先,在实践中对你来说真正重要的是你的眼睛是多么方便直观的符号.

话虽如此,我已经完成了ANTLR和JavaCC的项目,并发现ANTLR对于大多数事情都是非常重量级的.

  • 同意,ANTLR似乎有更好的工具支持,但JavaCC生成简洁的代码,平均编译低于50K,没有外部.jar依赖. (4认同)

Sin*_*ion 6

ANTLR对JavaCC的一个具体优势是它具有Java以外语言的生成器.这可能会使您的语言更容易移植到其他地方.


Win*_*hen 5

我上面第二个是詹姆斯。

ANTLR 的功能更全面:它是一个开箱即用的编译器 - 词法分析、解析、AST、树转换和代码生成。

对于 JavaCC 来说,它更像是一个解析器生成器,而不是编译器编译器。AST 支持是通过另一个名为 JJTree 的库提供的。

根据我个人的经验,您可以使用 ANTLR 做更多的事情,包括在规则之间传递参数以及通过所有子规则,这在制作复杂的解析器(例如 C# 的解析器)时有很大帮助。另外,规则重写也很经典。它可以帮助您轻松格式化您理想的 AST。

不过,它确实很重。对于一个简单的项目,您可能永远不会使用这些功能。Javacc 更酷。

  • javacc 也支持在规则和子规则之间传递参数 (3认同)