关注的是文档/可学习性,eclipse集成,工具,社区支持和性能(大致按此顺序).
有几种选择你不应该排除:
JParsec是一个解析器组合框架,允许您完全从代码构造解析器.
Scala的解析器组合框架解决了类似问题; 但是,Scala的语法使所有这些都更具可读性.
然后还有John Metsker完成的解析器组合框架,用于他的书" 用Java构建解析器" ; 我不记得图书馆究竟在哪里,但它至少在互联网上漂浮着.它解决了同样的问题:您没有在单独的非Java文件中定义语法和标记定义; 相反,它都是Java.
Fortress,编程语言Sun已经开发多年了,现在似乎建立在这个工具包上:Rats.我没有太多的信息,但我认为如果他们将它用于他们的新编程语言,它可能有一些有趣的功能.
总的来说,我得到的印象是代码生成器的年代已经结束.如果我是你,我会使用Scala的解析器组合工具包.基本上,任何支持Scala的IDE也"支持"这个解析器组合框架.表现很好,AFAICT.
顺便说一句,ANTLR有一个相当不错的IDE支持,作为一个Eclipse插件(但也许在IntelliJ中也有一些东西 - 我不记得了.)所以,如果你选择经典的方法来定义你的词法分析器和解析器你认为,你的语言,ANTLR应该是你的选择.它是Java开发人员中最大的头脑,有工具支持,ANTLR的作者有一本很好的书.我不认为任何其他工具包可以声称.
关于你提到的问题,我建议JavaCC是一个更好的选择.Java开发人员学习的速度更快,更容易(语法与普通Java非常相似),文档全面,Eclipse集成也足够.
ANTLR功能更全面:它是一个更加丰富的盒子编译器编译器 - lexing,解析,AST,树转换和代码生成.
对于JavaCC,它更像是一个Parser生成器而不是一个编译器编译器.AST支持是通过另一个名为JJTree的lib提供的.
首先,在实践中对你来说真正重要的是你的眼睛是多么方便直观的符号.
话虽如此,我已经完成了ANTLR和JavaCC的项目,并发现ANTLR对于大多数事情都是非常重量级的.
ANTLR对JavaCC的一个具体优势是它具有Java以外语言的生成器.这可能会使您的语言更容易移植到其他地方.