Wil*_*ger 28
有几种选择你不应该排除:
总的来说,我得到的印象是代码生成器的年代已经结束.如果我是你,我会使用Scala的解析器组合工具包.基本上,任何支持Scala的IDE也"支持"这个解析器组合框架.表现很好,AFAICT.
顺便说一句,ANTLR有一个相当不错的IDE支持,作为一个Eclipse插件(但也许在IntelliJ中也有一些东西 - 我不记得了.)所以,如果你选择经典的方法来定义你的词法分析器和解析器你认为,你的语言,ANTLR应该是你的选择.它是Java开发人员中最大的头脑,有工具支持,ANTLR的作者有一本很好的书.我不认为任何其他工具包可以声称.
jam*_*esh 10
ANTLR功能更全面:它是一个更加丰富的盒子编译器编译器 - lexing,解析,AST,树转换和代码生成.
对于JavaCC,它更像是一个Parser生成器而不是一个编译器编译器.AST支持是通过另一个名为JJTree的lib提供的.
首先,在实践中对你来说真正重要的是你的眼睛是多么方便直观的符号.
话虽如此,我已经完成了ANTLR和JavaCC的项目,并发现ANTLR对于大多数事情都是非常重量级的.
我上面第二个是詹姆斯。
ANTLR 的功能更全面:它是一个开箱即用的编译器 - 词法分析、解析、AST、树转换和代码生成。
对于 JavaCC 来说,它更像是一个解析器生成器,而不是编译器编译器。AST 支持是通过另一个名为 JJTree 的库提供的。
根据我个人的经验,您可以使用 ANTLR 做更多的事情,包括在规则之间传递参数以及通过所有子规则,这在制作复杂的解析器(例如 C# 的解析器)时有很大帮助。另外,规则重写也很经典。它可以帮助您轻松格式化您理想的 AST。
不过,它确实很重。对于一个简单的项目,您可能永远不会使用这些功能。Javacc 更酷。