Antlr简介

来源:互联网 发布:李小龙 命理 知乎 编辑:程序博客网 时间:2024/04/30 22:06

        ANTLR是ANother Tool for Language Recognition的缩写“又一个语言识别工具”。从名字上可以看出在ANTLR出现之前已经存在其它语言识别工具了(如LEX,YACC。ANTLR的官方定义为:根据一种可以嵌入如Java, C++或C#等辅助代码段的文法,来构筑出相对该文法的识别器,编译器或翻译器的一种语言工具框架。这个定义说明了ANTLR的功能是根据给定文法自动生成编译器,其过程为先编写相应语言的文法然后生成相应语言编译器。定义提到的语言识别器,编译器和翻译器我们以后统称为语法分析器。事实上ANTLR是生成相应语言编译器的源代码,我们还需要编译它。那么ANTLR可以生成哪些方语言的语法分析器源代码语言的代码呢?这是程序员很关心的问题。幸运的是ANTLR现在已经支持了多种当前流行的开发语言,包括Java、C#、C、C++、Objective-C、Python和 Ruby.1等。其结构如下图所示:

由上图可以看出,ANTLR的基本结构分为ANTLR文法、ANTLR Runtime两部分,其中ANTLR Runtime包含java、C#、C、C++等许多语言的解析编译引擎,在实际使用的时候可以根据需要生成其中任何一种语言的语法分析器。由于我自己使用的是java语言,所以后面部分的文章基本上围绕java来写,不想一味的抄写现在网上已有的那些博文,在后面的文章中会尽量结合自己的实际使用经验来描述,但由于自己的水平有限,外加使用ANTLR时间不长,故后面博文中有什么纰漏或者错误的地方,还望大家批评和指正。

    ANTLR是Java开发的词法分析工具,它可以接受词文法语言描述,并能产生识别这些语言的语句的程序。ANTLR只进行到AST树这部分,并不是完整的编译器,但是生成的代码结构优良,较符合oo思维。目前,Hive和Hibernate等在SQL解析时均采用Antlr来进行SQL解析。

        下面说说ANTLR的具体处理过程吧,在使用ANTLR解析文本的时候,先编辑ANTLR文法文件(以.g为后缀的文件),在里面定义好词法分析和语义分析的相关规则,然后利用ANTLR Runtime来根据所选定的语言来生成所对应语言的文件,例如java语言,则生成java语言所对应的java类,最后在需要时直接调用生成的类来对指定的文本进行解析即可
原创粉丝点击