以语句的四元式中间代码及其语法制导生成为例分析语法制导生成方法.docx
- 文档编号:17771318
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:12
- 大小:94.89KB
以语句的四元式中间代码及其语法制导生成为例分析语法制导生成方法.docx
《以语句的四元式中间代码及其语法制导生成为例分析语法制导生成方法.docx》由会员分享,可在线阅读,更多相关《以语句的四元式中间代码及其语法制导生成为例分析语法制导生成方法.docx(12页珍藏版)》请在冰点文库上搜索。
以语句的四元式中间代码及其语法制导生成为例分析语法制导生成方法
郑州轻工业学院
课程设计说明书
题目:
WHILE语句的四元式结构及其语法制导生成过程
姓名:
院(系):
计算机与通信工程学院
专业班级:
计算机科学与技术10-1
学号:
指导教师:
马吉明
成绩:
时间:
2013年6月17日至2013年6月21日
郑州轻工业学院
课程设计任务书
题目WHILE语句的四元式结构及其语法制导生成过程
专业、班级计算机科学与技术10-1学号
姓名
主要内容
以语句的四元式中间代码及其语法制导生成为例分析语法制导生成方法。
给出FOR或WHILE语句的四元式结构及其语法制导生成过程。
基本要求
通过设计、编制、调试一个WHILE循环语句的语法及语义分析程序,加深对语法及语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。
用语法制导完成语义分析,并将形成的中间代码以四元式的形式输出。
主要参考资料等:
《程序设计语言编译原理》陈火旺编著国防工业出版社
《编译原理》吕映芝张素琴蒋维杜编著清华大学出版社
完成期限:
2013年6月21日
指导教师签名:
课程负责人签名:
年月日
目录
1设计内容及要求3
2系统描述4
3文法及属性文法的描述4
3.1文法的描述4
3.2属性文法的描述5
4语法分析方法描述及语法分析表设计5
4.1语法分析表设计5
4.1.1文法的DFA5
4.1.2LR(0)分析表7
4.2LR(0)分析方法描述说明7
5中间代码形式的描述及中间代码序列的结构设计8
6编译系统的概要设计9
7心的体会11
1设计内容及要求
设计一个语法制导翻译器,将WHILE语句翻译成四元式。
要求:
先确定一个定义WHILE语句的文法,为其设计一个语法分析程序,为每条产生式配备一个语义子程序,按照一遍扫描的语法制导翻译方法,实现翻译程序。
对用户输入的任意一个正确的WHILE语句,程序将其转换成四元式输出(可按一定格式输出到指定文件中)。
2系统描述
通过设计、编制、调试一个WHILE循环语句的语法及语义分析程序,加深对语法及语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。
用语法制导完成语义分析,并将形成的中间代码以四元式的形式输出。
3文法及属性文法的描述
3.1文法的描述
该文法的产生式如下所示:
(1)S->while(B){E}
(2)E->AE
(3)E->A
(4)A->iPA
(5)A->i
(6)B->iTi
(7)B->i
其中while、(、)、{、}、P、T、;和i均为终结符,而S、A、B、E这些大写字母均为非终结符。
T表示比较运算符,P表示算术运算符,i表示合法标识符。
3.2属性文法的描述
对该文法的属性文法描述如下:
(1)S->while(B){E}prinf(ifBgotoEelsegotonext)
(2)E->AEprint(E.val=A.val·E.val)
(3)E->Aprint(E.val=A.val)
(4)A->iPAprint(A=i.ValPA.Val)
(5)A->i;A.Val=i;
(6)B->iTiprint(B=i1.ValTi2.Val)
(7)B->iB.Val=i
4语法分析方法描述及语法分析表设计
4.1语法分析表设计
4.1.1文法的DFA
I0:
S’->·S
S->·W(B){E}
4.1.2LR(0)分析表
状态
while
(
)
{
}
i
op
rop
;
#
S
E
B
A
0
S2
1
1
Z
2
S3
3
S5
4
4
S6
5
r7
S7
6
S9
7
S8
8
r6
9
S14
11
10
10
r3
S14
13
10
11
S12
12
r1
13
r2
14
S15
S17
15
S14
16
16
r4
r4
17
r5
r5
4.2LR(0)分析方法描述说明
LR分析法的规约过程是规范推到的逆过程,所以LR分析过程是一种规范规约的过程。
其分析过程为:
由文法构造出该文法项目集,再根据项目集构造该文法的DFA,再判断是否有移进-规约和规约-规约冲突,若没有冲突则该文法为LR(0)的,若有冲突则该文法是SLR
(1)的,最后可以构造出LR(0)分析表。
然后根据LR(0)分析表进行语法分析,分析过程就是进栈和规约的过程。
若能规约出开始符S,则语法正确。
反之,语法错误。
5中间代码形式的描述及中间代码序列的结构设计
本系统中所采用的中间代码形式是四元式,是一种比较普遍采用的形式。
四元式的四个组成成分是:
算符op,第一和第二运算对象ARG1和ARG2及运算结果RESULT。
运算对象和运算结果有时指用户自己定义的变量,有时指编译程序引进的临时变量。
例如a:
=b*c+b*d的四元式表示如下:
1)(*,b,c,t1)
2)(*,b,d,t2)
3)(+,t1,t2,t3)
4)(:
=,t3,-,a)
四元式对中间结果的引用必须通过给定的名字,也就是说,四元式的联系是通过临时变量实现的。
将while(BropC)gotoL写成(jrop,B,C,L)
本程序中所用到的四元式语句如下:
1)形如(op,arg1,arg2,result)的赋值语句
2)形如(jrop,B,C,L)的条件转移语句
3)形如(=,arg1,-,result)的复写语句
6编译系统的概要设计
6.1词法分析
词法分析程序要做的工作是:
从源程序的第一个字符开始,顺序读字符,一次读一个,根据所读进的字符识别各类单词,同时去掉源程序中的空白和注释。
词法分析检查的错误主要是挑出源程序中出现的非法符号。
所谓非法符号是指不是程序设计语言中允许出现的符号,就像自然语句中的错字。
流程图如下:
6.2语法分析是编译过程的核心部分
它的任务是在词法分析识别出单词符号串的基础上,分析并判定程序的语法结构是否符合语法规则。
流程图如下:
其中SP为栈顶指针,S[i]为状态栈,X[i]为文法符号栈。
状态转换表内容按关系GOTO[Si,X]=Sj确定,改关系式是指当前栈顶状态为Si遇到当前文法符号为X时应转向状态Sj。
X为终结符或非终结符。
ACTION[Si,a]规定了栈顶状态为Sj时遇到输入符号c[i]应该执行的动作。
动作有以下四种可能:
(1)移进:
当Sj=GOTO[Si,a]成立,则把Sj移入到文法符号栈。
其中i,j表示状态号。
(2)规约:
当在栈顶形成句柄为b时,则用b归约为相应的非终结符A,即当文法中有A->b的产生式,而b的长度为r,则从状态栈和文法符号栈中自栈顶向下去掉r个符号。
并把A移入文法符号栈内,再把满足Sj=GOTO[Si,A]的状态移进状态栈,其中Si为修改指针后的栈顶状态。
(3)接受acc:
当归约到文法符号栈中只剩下文法的开始符号S时,并且输入符号串已结束即当前输入符是‘#’,则为分析成功。
(4)报错:
当遇到状态栈顶为某一状态下出现不该遇到的文法符号时,则报错,说明输入串不是该分发能接受的句子。
6.3语法制导翻译
在语法分析过程中,随着分析的步步进展,根据每个产生式所对应的语义子程序(或
语义规则描述的语义动作)进行翻译。
属性文法的每个符号有属性,所以每个符号入栈时,必须连属性一起入栈,这样,栈符号就由文法符号及存放该符号属性的域所组成。
由于属性类型不同,属性域存放的内容就要根据属性的类型来定。
有的可能直接存放属性值,也有的存放的是指向属性值的指针。
对于综合属性,其属性域不存放其属性值,而是存放一个指针,指向存贮该属性值的单元。
对于继承属性,其属性域直接保存其属性值。
继承属性的属性域刚入栈时为空,但是在该栈符号变成栈顶符号之前的某一时刻,它们必须接受相应的属性值,即在成为栈顶时,继承属性的属性域必须有值。
7心的体会
通过本次的编译原理的课程设计,我进一步认识了LR分析方法,对于大多数用无二义性的上下文无关文法描述的语言都可以用相应的LR分析器进行识别,而且这种方法还具有分析速度快,能准确、即使地指出出错的位置。
但是它有一个很明显的缺点:
对于一个实用的高级语言程序,文法的分析器的构造工作量是相当大的。
本次课程设计,我就仅仅只是用了一个简单的直接文法来构造分析表实现“WHILE循环语句的翻译程序设计”,因此,有许多的不足之处,例如:
改程序只能支持WHILE循环判断中的“>”和“<”两种条件,还有就是表达式的部分只支持简单的赋值语句的运算。
此外,在课程设计的过程中我又复习了一些C++编程的知识点,熟悉了一些常用的库函数,例如:
字符函数库
conio.h头文件,conio是ConsoleInput/Output(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作,比如getch()函数等等。
iomanip.h是I/O流控制头文件,用于格式化的输出。
还熟悉了关于Stack类的函数的运用,剩去了我们自己定义stack函数的麻烦,只需在头文件中加入#include
总结下来,此次课程设计使我获益匪浅,在实践中点点滴滴的提升了自己的逻辑分析和编程以及调试程序的能力。
说明
1、课程设计进行期间,学生应按教学计划,将每天的学习情况(包括学习内容、遇到问题及解决办法、心得体会等)如实进行记录。
2、结束时,根据课程设计内容和学习记录书写报告。
3、指导教师应综合考虑学生的学习态度、报告内容和实际操作情况等,给出评语和成绩。
课程设计报告撰写格式
1、课程设计说明书用纸一律采用16开幅面,有条件最好打印。
打印正文用宋体小四号字;版面页边距:
上2.5cm,下2.5cm,左3cm,右2cm;页码用小五号字底端居中;左边装订。
2、课程设计报告一般由以下几部分组成:
A.任务书;B.目录;C.正文;D.参考文献;E.附录。
3、报告正文撰写的题序层次格式:
第一种
第二种
第一章(居中、小二号黑体字)
1.(居中、小二号黑体字、)
第一节(顶格、小三号黑体字)
1.1(顶格、小三号黑体字)
一(顶格、四号黑体字)
1.1.1(顶格、四号黑体字)
(一)(顶格、小四号黑体字)
课程设计成绩评定表
评定项目
内容
满分
评分
总分
学习态度
学习认真,态度端正,遵守纪律。
10
答疑和设计情况
认真查阅资料,勤学好问,提出的问题有一定的深度,分析解决问题的能力较强。
40
说明书质量
设计方案正确、表达清楚;设计思路、实验(论证)方法科学合理;达到课程设计任务书规定的要求;图、表、文字表达准确规范,上交及时。
40
回答问题情况
回答问题准确,基本概念清楚,有理有据,有一定深度。
10
总成绩
采用五级分制:
优、良、中、及格、不及格
指导教师评语:
签名:
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语句 四元式 中间 代码 及其 语法 制导 生成 分析 方法