antlr介绍,第一章

antlr介绍,第一章

ID:37695120

大小:255.86 KB

页数:13页

时间:2019-05-28

antlr介绍,第一章_第1页
antlr介绍,第一章_第2页
antlr介绍,第一章_第3页
antlr介绍,第一章_第4页
antlr介绍,第一章_第5页
资源描述:

《antlr介绍,第一章》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、ANTLR指南1第一章HelloWorldANTLR是ANotherToolforLanguageRecognition的缩写“又一个语言识别工具”,读1['æntlə]。从名字上可以看出在ANTLR出现之前已经存在其它语言识别工具了(如LEX,2YACC)。ANTLR的官方定义为:根据一种可以嵌入如Java,C++或C#等辅助代码段的文法,来构筑出相对该文法的识别器,编译器或翻译器的一种语言工具框架。这个定义说明了ANTLR的功能是根据给定文法自动生成编译器,其过程为先编写相应语言的文法然后生成相应语言编译器。定义提到的语言识别器,编译器和翻译器我们以后

2、统称为语法分析器。事实上ANTLR是生成相应语言编译器的源代码,我们还需要编译它。那么ANTLR可以生成哪些方语言的语法分析器源代码语言的代码呢?这是程序员很关心的问题。幸运的是ANTLR现在已经支持了多种当前流行的开发语言,包括Java、C#、C、C++、Objective-C、Python和Ruby.1等。你可以根据需要生成其中任何一种语言的语法分析器。本书主要介绍java,C#两种语言,有详细的操作步骤包括如何编译、执行和如何使用ANTLRWorks开发环境编写文法等。读者可以顺利上手,避免实际操作的障碍。后面章节还会指出在Java和C#开发中应注意

3、的细微差别,确保程序的顺利运行。ANTLR文法嵌入C#,java…代码片段ANTLRRuntime生成C#JavaCC++Pythoncsc.exejavac.exe……编译编译.NETJVM语法分析器语法分析器1.1开发HelloWorld示例本章将开发一个简单示例让读者对ANTLR有一个初步的认识,并搭建开发环境以便后续1一种词法分析器(分描器)的自动产生系统,用正则表达式来描述文法结构。2一种语法分析程序的自动产生器,可以处理能用LALR(1)文法表示的上下文无关语言。第一章HelloWorld2的学习。读者在示例中遇到不懂的地方也不必担心,我们的目

4、的是搭建开发环境学会编译运行语法分析器。用ANTLR开发一个语法分析器大致分三步,第一步:写出要分析内容的文法。第二步:用ANTLR生成相对该文法的语法分析器的代码。第三步:编译运行语法分析器。和多数编译书籍一样,本章也用解析简单的表达式作为示例。要解析的表达式中有二种数据类型:整数如“23”,“5”和字符串如“HelloWorld”。表达式中以算术表达式为主也包括赋值表达式。我们列举两个表达式语句:23+4*(5+1);str=“HelloWorld”;第一条语句是一个算术表达式,括号改变了运算顺序,计算结果不赋给任何变量。第二条是一个赋值表达式,将字符

5、串赋给一个变量。后面我们要开发一个语法分析器来分析这两条语句。在开发之前先简单提一下语法树的概念,在语法分析中一般用树来表示语法结构,表达式的语法树是以操作符为根节点操作数为子节点的树形结构,23+4*(5+1)的语法树根据图1.1所示的操作符的优先级如下。+23*4+51图1.1算术表达式先计算5+1,5+1在括号中操作符的优先级最高在语法树中的深度最大,然后是4*(5+1),最后是23+4*(5+1)。可以看出语法树的求值顺序是从下向上的,先计算深度大的操作符5+1结果为6,然后是4*6结果为24,然后是23+24表达式的结果为47。下面再看一下赋值表

6、达式的语法树结构:=str“HelloWorld”图1.2赋值操作符“=”做为根节点变量str作为左子树,而字符串表达式“HelloWorld”作为右子树。了解了语法树后我们开始录入文法源文件。ANTLR中文法文件是扩展名为“.g”的文本文件,“.g”文件就是我们的源文件。这里新建一个叫“E.g”的文法文件,在文件中输入如下文法定义:ANTLR指南3grammarE;options{output=AST;}program:statement+;statement:(expression

7、VAR'='expression)';';expression:(mu

8、ltExpr(('+'

9、'-')multExpr)*)

10、STRING;multExpr:atom('*'atom)*;atom:INT

11、'('expression')';VAR:('a'..'z'

12、'A'..'Z')+;INT:'0'..'9'+;STRING:'"'(('A'..'Z'

13、'a'..'z'

14、'')+)'"';WS:(''

15、't'

16、''

17、'r')+{skip();};文件的第一行grammarE的E为文法的名称它与文件名一致。第二行是文法的设置部分options{output=AST;},output=AST表示让语法分析器返回包含语

18、法树的信息。第三行开始是文法定义部分,文法是用EBNF1推导式来描

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。