- 13
- 0
- 约1.72万字
- 约 27页
- 2016-10-17 发布于重庆
- 举报
antlr详细介绍
利用ANTLR生成C++描述的分析程序
Thursday, August 17th, 2006
摘要
ANTLR(ANother Tool for Language Recognition)是一种基于LL(k)文法的语法分析程序(以下简称分析器)生成工具。其生成的分析器默认使用Java描述,而不是更高效的C++。本文介绍了在Windows平台下,借助VC6.0进行组织工程,使用ANTLR生成C++描述的分析器的方法,并给出了一个实例。最后,本文对ANTLR本身做出了一点小小的改进。
关键字
ANTLR,语法分析器,语法分析器生成工具
ANTLR简介
分析器的自动生成一直是编译理论研究的一个方向。早期的程序员手工编写分析器,不但费时费力,而且编写的分析器不稳定、不易修改和移植。在自动化大潮冲击之下,越来越多的程序员抛弃了这种手工做法。
由旧金山大学的Terence Parr 领导开发的ANTLR(以前叫做PCCTS,Purdue Compiler Construction Tool Set,普渡大学编译器构建工具集)是一种分析器自动生成工具,它可以接受语言的文法描述,并能产生识别这些语言的程序。而且我们可以在文法描述中插入特定的语义动作,告诉ANTLR怎样去创建抽象语法树(AST)和怎样产生输出。
现在ANTLR越来越流行(有评论说ANTLR的出现是一个里程碑),不仅因为它功能更强、容易扩展、开源,而且ANTLR生成的代码和使用递归下降方法(手工生成分析器的主要方法)生成的代码很相似,易于阅读理解。与之相比,另外一种著名的分析器生成工具YACC(Yet Another Compiler-Compiler,基于LR分析方法)生成的程序就比较晦涩。
目前国内介绍ANTLR的文章不多,仅有的文章也是介绍使用ANTLR生成使用java描述的分析器。其实ANTLR也可以生成C++描述的源程序(从2.7.3版本开始,ANTLR开始支持C#,将来还会支持Python),不过需要一些准备工作。本文将详细地介绍其中的具体步骤。
最新版本的ANTLR可以去ANTLR的官方网站(http://www.ANTLR.org)下载。截止到2004年6月,ANTLR的最新版本是2.7.4。下载的文件是一个不到1.3M的tar.gz形式的压缩包,将其解压到某个目录(下文用表示)。
ANTLR是使用Java开发的,需要JDK的支持。本文假设您的机器已经安装JDK,并正确设置了classpath。
文法文件
文法就是语言识别的规则。它是ANTLR生成程序的依据。文法文件是ANTLR的核心,是程序员和ANTLR进行交流的接口。
文法文件的编写基本是面向被解决的问题的。程序员只需要集中精力思考解决问题的逻辑,而不是羁绊于某种程序设计语言的实现细节,因此降低了出现错误的可能性。
文法文件的语法简介
本文只是简单地介绍一个文法文件的语法,具体内容可以参阅ANTLR的相关文档。
文法文件一般包括header块、options块、文法分析器类(parser)及规则定义、词法分扫描器类(lexer)及token定义。其中最为重要的是规则和token的定义。
规则的定义形式和编译理论中的扩展巴科斯范式(EBNF)极为相似,包括规则名、规则体、一个用作结束标志的分号和异常处理部分(可省略)。例如如下的规则就描述了C语言中的赋值语句的语法:
assignment_stat:
???? id ‘=’ expr ‘;’
???? ;
其意义是:一条赋值语句是由一个id、一个等号、一个表达式和一个分号顺序组成的。
Token的定义方法与规则类似。例如如下的token定义就表示一个十进制的整数:
NUM:
???? (‘1′..’9′)(‘0′..’9′)*
???? ;
其意义是:数字(NUM)的第一字符是‘1’到‘9’中的一个字符,后面是0个或多个‘0’到‘9’之间的字符。
需要注意的一点是:规则的名字必须是小写字母开始,而token的名字则必须是大写字母开始。
设定ANTLR生成的语言
ANTLR有很多选项,可以通过在文法文件中的options块中进行设置,其中包括ANTLR最终生成的语言。如果要生成C++描述的分析器程序,就要如下设定:
options
{
language=”Cpp”;
// Other options
}
language选项的默认值是“Java”。如果您希望生成的程序是C#的,将language设为“Csharp”就可以了。
C++程序的例子
下面就给出一个ANTLR生成的C++描述的分析器的实例。该分析器的功能是分析用户输入的一个算术表达式,给出该表达式的最终结果。在该表达式中允许出现的运算符除了加减乘除之外,还包括求幂运算符“^”,以及sin、cos和t
您可能关注的文档
最近下载
- 人体解剖学第五版复习重点.doc VIP
- (完整版)高考3500词汇表(带音标) .pdf VIP
- 道教教职人员认定申请表.pdf VIP
- 基于多任务学习的人机协同跨领域知识迁移研究.pdf VIP
- 2025年环境影响评价师“土十条”相关政策与措施专题试卷及解析.pdf VIP
- 2024年江苏省泰州市中考英语试题卷(含答案解析).docx
- 2025年金融风险管理师资本市场工具综合风险管理案例专题试卷及解析.pdf VIP
- 2025年信息系统安全专家工控协议基础概念与分类专题试卷及解析.pdf VIP
- 2025年项目管理专业基于泊松分布的C图与U图专题试卷及解析.pdf VIP
- 贷款结清证明模板.doc VIP
原创力文档

文档评论(0)