antlr
antlr
antlr—Another Tool for Language Recognition,其前身是PCCTS,它为包括Java,C++,C#在内的语言提供了一个通过语法描述来自动构造自定义语言的识别器(recognizer),编译器(parser)和解释器(translator)的框架。
发展历程
ANTLR是由Terence Parr博士等人于1989年开始发展的,最初命名为PCCTS(Purdue 编译器 Construction Tool Set)。Terence Parr在普渡大学攻读硕士学位时开始研究构造自动化的分析器,并在1993年取得博士学位,同年发布了ANTLR 1.10版。ANTLR最早只支持Java语言,直到ANTLR 3版本以后,才开始支持多种编程语言,包括Ada95、C、C#、ECMAScriptObjective-CPerlPythonRubyC++和Standard ML。
软件简介
开源语法分析器--ANTLR
1.1 flex词法分析器(Lexer)... 1-1
1.2 语法分析器(Parser)... 1-1
1.3 ANTLR... 1-2
2.1 安装及使用... 2-2
2.2 ANTLR语法文件解析... 2-3
2.3 ANTLR规则(RULE)解析... 2-4
4.1 ANTLR Studio插件的安装... 4-7
4.2 功能简介
1 ANTLR简介
ANTLR可以通过断言(Predicate)解决识别冲突;支持动作(Action)和返回值(Return Value)来;更棒的是,它可以根据输入自动生成语法树并可视化的显示出来(这一点我将在下面的例子中演示)。由此,计算机语言的翻译变成了一项普通的任务—在这之前Yacc/LEX显得过于学院派,而以LL(k)为基础的ANTLR虽然在效率上还略有不足,但是经过近些年来的升级修改,使得ANTLR足以应付现存的绝大多数应用。感谢Terence parr博士和他的同事们十几年来的出色工作,他们为编译理论的基础和语言工具的构造做了大量基础性工作,也直接导致了ANTLR的产生。
1.1 flex词法分析器(Lexer)
词法分析器又称为Scanner,Lexical analyser和Tokenizer。程序设计语言通常由关键字和严格定义的语法结构组成。编译的最终目的是将程序设计语言的高层指令翻译成物理机器或虚拟机可以执行的指令。词法分析器的工作是分析量化那些本来毫无意义的字符流,将他们翻译成离散的字符组(也就是一个一个的Token),包括关键字,标识符,符号(symbols)和操作符供语法分析器使用。
1.2 语法分析器(Parser)
编译器又称为Syntactical analyser。在分析字符流的时候,Lexer不关心所生成的单个Token的语法意义及其与上下文之间的关系,而这就是Parser的工作。语法分析器将收到的Tokens组织起来,并转换成为目标语言语法定义所允许的序列。
无论是Lexer还是Parser都是一种识别器,Lexer是字符序列识别器而Parser是Token序列识别器。他们在本质上是类似的东西,而只是在分工上有所不同而已。
1.3 树分析器 (tree parser)
树分析器可以用于对语法分析生成的抽象语法树进行遍历,并能执行一些相关的操作。
1.4 ANTLR
ANTLR将上述结合起来,它允许我们定义识别字符流的词法规则和用于解释Token流的词法分析规则。然后,ANTLR将根据用户提供的语法文件自动生成相应的词法/语法分析器。用户可以利用他们将输入的文本进行编译,并转换成其他形式(如AST—Abstract Syntax Tree,抽象的语法树)。
软件特点
ANTLR使用自上而下的递归下降LL剖析器方法,基于LL(*)算法实现,它的文法定义使用类似EBNF的定义方式,使得规则表达简洁直观。ANTLR的规则要以分号“;”结束,使用“|”表示“或”的关系,以及“*,+”表示可以出现0次或多次。ANTLR本身使用switch-case来匹配token,形成记号序列记号流,与旧式的Yacc使用符号表的方式不同。ANTLR是完全exception-driven,其LL(k)语法比目前流行的LR剖析器(包含SLR, LALR等)更为强大,可以避免LR剖析器的语法冲突,产生的代码清楚易懂,便于程序员阅读和理解。同时,ANTLR还支持Unicode。
功能和服务
ANTLR被广泛应用于多个领域和项目中,例如Groovy、Jython、Hibernate、OpenJDK 编译器 Grammar project、赛富时com的Apex语言、Apple的Numbers中的表达式求值器、Twitter的搜索查询语言、Weblogic server、IntelliJ IDEA、Clion、Apache Cassandra和Processing等。
参考资料
目录
概述
发展历程
软件简介
软件特点
功能和服务
参考资料