1.1 词法分析器(Lexer)1.2 语法分析器(Parser)1.3 ANTLR2.1 安装及使用2.2 ANTLR语法文件解析2.3 ANTLR规则(RULE)解析4.1 ANTLR Studio插件的安装4.2 功能简单介绍
1 ANTLR简单介绍ANTLR—A,其前身是PCCTS,它为包含Java,C++,C#在内的语言提供了一个通过语法描写叙述来自己主动构造自己定义语言的识别器(recognizer),编译器(parser)和解释器(translator)的框架。ANTLR能够通过断言(Predicate)解决识别冲突;支持动作(Action)和返回值(Return Value)来;更棒的是,它能够依据输入自己主动生成语法树并可视化的显示出来(这一点我将在以下的样例中演示)。由此,计算机语言的翻译变成了一项普通的任务—在这之前YACC/LEX显得过于学院派,而以LL(k)为基础的ANTLR尽管在效率上还略有不足,可是经过近些年来的升级改动,使得ANTLR足以应付现存的绝大多数应用。感谢Terence Parr博士和他的同事们十几年来的出色工作,他们为编译理论的基础和语言工具的构造做了大量基础性工作,也直接导致了俄ANTLR的产生。nother Tool for Language Recognition1.1 词法分析器(Lexer)词法分析器又称为Scanner,Lexical analyser和Tokenizer。程序设计语言通常由keyword和严格定义的语法结构组成。编译的终于目的是将程序设计语言的高层指令翻译成物力机器或虚拟机能够运行的指令。此法分析器的工作是分析量化那些本来毫无意义的字符流,将他们翻译成离散的字符组(也就是一个一个的Token)括keyword,标识符,符号(symbols)和操作符供语法分析器使用。1.2 语法分析器(Parser)编译器又称为Syntactical analyser。在分析字符流的时候,Lexer不关心所生成的单个Token的语法意义及其与上下文之间的关系,而这就是Parser的工作。语法分析器将收到的Tokens组织起来,并转换成为目标语言语法定义所同意的序列。不管是Lexer还是Parser都是一种识别器,Lexer是字符序列识别器而Parser是Token序列识别器。他们在本质上是相似的东西,而仅仅是在分工上有所不同而已。1.3 ANTLRANTLR将上述两者结合起来,它同意我们定义识别字符流的词法规则和用于解释Token流的词法分析规则。然后,ANTLR将依据用户提供的语法文件自己主动生成对应的词法/语法分析器。用户能够利用他们将输入的文本进行编译,并转换成其它形式(如AST—Abstract Syntax Tree,抽象的语法树)。2 ANTLR的使用2.1 安装及使用到http://www.antlr.org/下载最新版本号的ANTLR开发包和源代码(比如版本号2.7.5)。将antlr-2.7.5.jar所在文件夹配置到你的环境变量中,写好语法文件(比如SensorSQL.g),执行命令“java antlr.Tool SensorSQL.g”就能够获得自己主动生成语法/词法分析器。






4 ANTLR Studio有了前面的基础之后,我们就能够開始真正的工作了。只是用“记事本或Editplus+命令行”或者干脆写个ANT脚本也不是不能够,可是总认为在集成化IDE满天飞的时代用这个方式有点过于原始,幸好Placid System 为我们提供了一个Eclipse插件来使我们有机会直接走出原始社会。下载地址为:http://www.placidsystems.com/,眼下最新版本号是1.1.0。唯一令人遗憾的是这个插件尽管功能非常完好,却是要收费的,否则仅仅有11天的试用期。










4.2.2 增强的Debug功能想要启动或关闭ANTLR Studio的Debug功能,须要完毕下面步骤:l 在project中启用/取消ANTLR Studiol 右键单击project,打开“属性”中的ANTLR Studio选项卡。l 选择/取消‘Enable debugging in grammar files‘



5 结束语在这篇文章里,我没有介绍ANTLR的各种使用或语言细节,我觉得这些东西网络上有大把中/英文的资料能够參考,我所关注的是一个大的方向和其最核心的内容。对于那些不想深入了解ANTLR实现原理或不想研究其代码而仅仅想尽快让它在自己的project中起作用的人来说,依旧足够了,祝各位ANTLR之旅愉快—像我一样J。
参考: http://www.mamicode.com/info-detail-842133.html