信息工程学院编译原理实习指导书老版Word格式文档下载.docx
- 文档编号:22246003
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:9
- 大小:316.44KB
信息工程学院编译原理实习指导书老版Word格式文档下载.docx
《信息工程学院编译原理实习指导书老版Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《信息工程学院编译原理实习指导书老版Word格式文档下载.docx(9页珍藏版)》请在冰豆网上搜索。
每个Token对象的主要成员:
intkind表示单词的种别;
Stringimage存储了token所代表的内容;
intbeginLine表示单词所处的行;
intbeginColumn表示单词所处的列。
TokenManager:
词法分析器,用来识别源程序中的单词序列。
SimpleCharStream:
词法分析器的输入流。
可以指定源程序来自于标准输入还是文件。
TokenMgrError:
词法错误类,当识别到非法单词时,弹出的错误对象。
Constants:
保存已定义所有单词的接口,针对每种单词定义其对应的种别码。
2.使用以上的类,编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。
并依次输出各个单词的内部编码及单词符号自身值。
二、实验预习提示
1.词法分析器的功能和输出格式
词法分析器的功能是读入源程序,输出单词序列。
词法分析器的单词常表示成二元式:
(单词种别码,单词在源代码中的字符串)。
2.词法分析器需要把对象语言的词法规则全部描述出来,在这我们取C语言子集,它的词法定义如下:
(1)关键字KEYWORD
ifelseintreturnvoidwhile……..所有的关键字都是小写。
(2)标识符IDENTIFIER
标识符的定义采取正则表达式定义方式,标识符由字母、数字、下划线“_”组成,并且首字母不能是数字。
(3)分隔符SEPARATER
;
,{}[]()
(4)运算符OPERATOR
+-*/>
<
=
(5)常数CONSTANT
简化为只表示整型常数。
(6)词法分析过滤的字符
空格“”、制表符“\t”、回车“\r”和换行符“\n”。
三、实验过程和指导:
1.准备
编译原理的实习借助的javacc插件版本是1.5.33,要求jdk版本是1.7。
请提前安装调试好。
2.新建一个用于javacc编辑的jj模板文件:
(1)新建java项目
(2)建立一个词法分析包(例如:
packagelexical)
(3)在lexical包内,“新建”-“其它”-“JavaCCTemplateFile”
(4)创建一个“.jj”文件,如图1所示:
图1新建jj模板文件
3.在模板文件中修改第三部分,将“二、实验预习提示”部分的词法规则写入。
图2jj模板文件格式
4.在熟悉词法分析器工作原理的基础上,在main方法中编写词法分析程序,并输出单词序列。
要求:
准备好多组测试源程序。
四、程序输入/输出示例:
图3测试源代码
图4词法分析输出1
对照图3,图4显示了词法输出的二元组序列(单词种别码,单词在源代码中的字符串)。
图4中最后一行提示词法错误的原因是
实验二语法分析
设计MiniC的上下文无关文法,利用JavaCC生成调试递归下降分析程序,以便对任意输入的符号串进行分析。
本次实验的目的主要是加深对递归下降分析法的理解。
二、语法分析器:
按照MiniC语言的语法规则检查词法分析输出的记号流是否符合这些规则,并根据这些规则所体现出的语言中的各种语法结构的层次性。
把规则写入到JavaCC的.jjt文件中,可以生成树状的层次结构。
三、JavaCC:
在JavaCC的文法规范文件中,不仅可以描述语言的语法规范,而且可以描述词法规范,本次实习中,利用JavaCC以MiniC语言构造一个不含语义分析的编译器前端,包括词法分析、语法分析,并要考虑语法分析中的错误恢复问题。
通过使用JavaCC,可以体会LL(k)文法的编写特点,掌握编写JavaCC文法规范文件的方法。
内容:
利用JavaCC生成一个MiniC的语法分析器;
1.用流的形式读入要分析的C语言程序,或者通过命令行输入源程序。
2.具有错误检查的能力,如果有能力可以输出错误所在的行号,并简单提示
3.如果输入的源程序符合MiniC的语法规范,输出该程序的层次结构的语法树
具体实施步骤如下:
1.把MiniC转换为文法如下
〈程序〉→intmain(){〈语句块〉*}
〈语句块〉→〈语句〉|{〈语句串〉*}
〈语句〉→〈顺序语句〉|〈条件语句〉|〈循环语句〉
〈顺序语句〉→〈声明语句〉|〈赋值语句〉
〈赋值语句〉→ID=〈表达式〉
〈条件语句〉→if〈条件〉〈语句块〉
〈循环语句〉→while〈条件〉〈语句块〉
〈条件〉→(〈表达式〉〈关系符〉〈表达式〉)
〈表达式〉→〈表达式〉〈运算符〉〈表达式〉|(〈表达式〉)|ID|NUM
(也可以使用javacc自动生成的表达式Expression的文法)
〈运算符〉→+|-|*|/
〈关系符〉→<|<=|>|>=|==|!
=
2.在eclipse环境下完成JavaCC的插件安装后,写一个JavaCC文法规范文件(扩展名为jj)
3.完成的功能包括词法分析,语法分析(输出语法树),能够读文件,也能够把输出的结果保存文件中,可以把树的层次结果输出到文件中。
实验三语义分析
一、实习目的
通过上机实习,加深对语法制时翻译原理的理解,掌握将语法分析所识别的语法成分变换为中间代码的语义翻译方法。
二、实习要求
采用递归下降语法制导翻译法对算术表达式、赋值语句、条件语句、循环语句进行语义分析生成四元式序列。
实习的输入和输出(举例)
1.输入语法分析提供的正确的单词串,输出四元式序列。
例如:
对于语句串:
floatr,h,s;
s=2*3.1416*r*(h+r)
2.输出的四元式序列如下:
(1)(*,2,3.1416,T1)
(2)(*,T1,r,T2)
(3)(+,h,r,T3)
(4)(*,T2,T3,T4)
(5)(=,T4,_,s)
3.实习内容:
以下三个内容难度不同,三选一实现即可。
(1)写出一个源程序中仅包含if…else,if语句的语法分析。
要求能分析其自身嵌套。
(2)写出一个源程序中仅包含while语句的语法分析。
求能分析其自身嵌套。
(3)写出一个源程序中包含while语句、if-else、if语句的语法分析。
要求能分析其自身嵌套。
注意:
(1)对条件的判断只需要实现关系表达式即可,不需要实现布尔表达式的翻译;
(2)“嵌套”功能的实现依赖于文法。
如果:
语句>
=>
…=>
if语句>
(推到得到)
〈if语句〉→if〈条件〉〈语句〉(产生式)
则有:
if〈条件〉if〈条件〉〈语句〉
即,<
会自动实现嵌套功能。
测试代码:
voidmain(){
while(a+2<
b)
while(c>
d){
a=b+1;
c=7;
}
}
结果:
1:
(+,a,2,T1)
2:
(J<
T1,b,4)
3:
(J,_,_,11)
4:
(J>
c,d,6)
5:
(J,_,_,10)
6:
(+,b,1,T2)
7:
(=,T2,_,a)
8:
(=,7,_,c)
9:
(J,_,_,4)
10:
(J,_,_,1)
if(a+2>
3){
b=6;
}
elseif(b>
7){
c=a+b;
d=0;
}
T1,3,4)
(J,_,_,6)
(=,6,_,b)
b,7,8)
(+,a,b,T2)
(=,T2,_,c)
(=,0,_,d)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息工程学院 编译 原理 实习 指导书