JavaCC(Java Compiler Compiler)是Java实现的语法分析器,用以根据用户自定义规则进行上下文无关语法内容的分析工作,以简化编译器开发时编写涉及词法、语法、语义规则处理代码时的工程量。
之C语言实现的简化编译构造程序LEX(Lexical Analyzers)和YACC(Yet Another Compiler Compiler),JavaCC使用递归下降的语法分析方法,定义的文法规则表达范围广泛。JavaCC不直接生成分析树或抽象语法树(AST),但提供建立分析树或AST生成的预处理器JJTree,JJTree采用压栈出栈的递归方法生成分析树,为JavaCC的输入进行预处理。
JavaCC在使用方面上手迅速,编译JavaCC生成的Java代码时,仅在标准JDK支持下,无需第三方JAR即可完成。首先,使用者按照JavaCC语法规范编写源文件,将标记(Token)、词法和语法规则、以及每个解析阶段中发生的行为定义在*.jj文件中。
之后,使用JavaCC编译器编译*.jj文件,可以生成Java代码实现的特定语言分析器。生成的源程序包含:*Parser.java(语法分析器)、*TokenManager.java(词法分析器)、TokenMgrError.java(错误处理程序)、Token. java (标记信息)、*Constants.java (分析器中使用的常量)、SimpleCharStream.java (字符流类)等源文件。在使用javac将源代码编译为class之后,就可以运行JavaCC生成的语法分析器来执行语法分析工作。
在JavaCC项目中,还提供了JJDOC工具,用以生成BNF范式表示的语法文档。同时,JavaCC项目为用户提供了可直接使用的语法库和实例代码,存放在examples目录中,其中包含文本邮件处理、JJTree示例、解释器实现等面向不同应用的示例。
在OGSA-DQP项目中,也使用了类似的查询编译器Polar*,来生成OQL对象查询树的语法解析结果,以解析分布式查询内容并绘制OQL查询树。
目前NetBeans IDE已提供了JavaCC编写和编译插件,支持*.jj文件的语法加亮和直接编译。在NetBeans IDE中借助JavaCC构建新语言的更多细节,请查看NetBeans Wiki中的详细教程。 |
|