编译原理课程设计
2012-07-12 16:11
316 查看
课程设计内容
1.题目:编译程序构造
2.内容:涉及词法分析、自下而上语法分析程序的实现:SLR(1)分析器的实现以及生成中间代码。
3.具体要求
根据LR分析算法构造SLR(1)分析程序,并完成语法分析动作(当需要一个单词时,调用词法分析程序获取),同时完成语义分析生成四元式输出。要求程序具有通用性,改变文法时只需改变程序的数据初值,无需改变程序主体;
要求完成一条说明语句、一条算术表达式和赋值语句的翻译,生成中间代码。
变量说明语句的文法及相应的语义子程序:.att表示数据类型属性,fill函数表示将单词id及其类别属性填写符号表。
(0)S→D; {acc}
(1)D→int id { fill(id,int);D.att=int; }
(2)D→float id {fill(id,float); D.att=float; }
(3)D→D(1),id { fill(id,D(1).att);D.att=D(1).att; }
算术表达式和赋值语句的文法及相应的语义子程序。
(1)A→id=E; {p=lookup(id.name);
emit(=,E.PLACE , _,p);}
(2)E→E(1)+T {E.PALCE=newtemp();
emit(+,E(1).PLACE,T.PLACE,E.PLACE)}
(3)E→T {E.PLACE=T.PLACE;}
(4)T→T(1)*F {T.PLACE=newtemp();
emit(+,T(1).PLACE,F.PLACE,T.PLACE)}
(5)T→F {T.PLACE=F.PLACE;}
(6)F→(E) { F.PLACE=E.PLACE;}
(7)F→id {P=LOOKUP(id.name)
F.PLACE=P;}
构造其用于SLR(1)分析的识别活前缀的DFA以及action表和goto表。然后编程实现。(关于词法分析部分只需识别出与此文法相关的单词即可(+,*,(,),id,=))。
4.程序设计提示:
(1)分析栈设计时可以用一个栈完成,也可以设计三个栈:一个符号栈,一个状态栈,一个语义栈,归约时,则需要在符号栈中退掉n个符号,在状态栈中退掉n个符号(n为产生式符号个数),语义栈中退掉n个符号对应的语义;
(2)终结符表和非终结符表的组织和预测分析程序中相同(将符号对应到一个数字,表示在分析表中对应的下标)。
(3)action表中的错误处理:简化的错误处理:当查找action表出现空白时,则当前单词无法移进和规约,可简单的认为当前单词为多余的单词,则抛弃当前单词,读下一单词继续分析。
5.测试数据:
作为程序测试数据,以赋值语句area=r*r+r$作为测试输入(源程序)。程序要求输出二元式序列、符号表、语法分析过程、四元式序列。
假设AA.TXT的文件内容如下:
int area,r;
area=r*r+r;
程序运行情况如下:
请输入源文件名称:E:\AA.TXT<回车>
语法分析过程如下:
状态栈 符号栈
语义栈 动作说明
源程序对应的二元式如下:
(int,-)
(id,0)
(,,-)
(id,1)
(;,-)
(id,0)
(=,-)
(id,1)
(*,-)
(id,1)
(+,-)
(id,1)
(;,-)
符号表如下:
0area
1r
源程序对应的四元式序列如下:
(*,r,r,T1)
(+,T1,r,T2)
(=,T2,,area)
分析过程完成。
PS:单表达式和赋值语句SLR表
[align=left]源码下载地址:http://download.csdn.net/detail/eyuanatqqdotcom/4425196[/align]
1.题目:编译程序构造
2.内容:涉及词法分析、自下而上语法分析程序的实现:SLR(1)分析器的实现以及生成中间代码。
3.具体要求
根据LR分析算法构造SLR(1)分析程序,并完成语法分析动作(当需要一个单词时,调用词法分析程序获取),同时完成语义分析生成四元式输出。要求程序具有通用性,改变文法时只需改变程序的数据初值,无需改变程序主体;
要求完成一条说明语句、一条算术表达式和赋值语句的翻译,生成中间代码。
变量说明语句的文法及相应的语义子程序:.att表示数据类型属性,fill函数表示将单词id及其类别属性填写符号表。
(0)S→D; {acc}
(1)D→int id { fill(id,int);D.att=int; }
(2)D→float id {fill(id,float); D.att=float; }
(3)D→D(1),id { fill(id,D(1).att);D.att=D(1).att; }
算术表达式和赋值语句的文法及相应的语义子程序。
(1)A→id=E; {p=lookup(id.name);
emit(=,E.PLACE , _,p);}
(2)E→E(1)+T {E.PALCE=newtemp();
emit(+,E(1).PLACE,T.PLACE,E.PLACE)}
(3)E→T {E.PLACE=T.PLACE;}
(4)T→T(1)*F {T.PLACE=newtemp();
emit(+,T(1).PLACE,F.PLACE,T.PLACE)}
(5)T→F {T.PLACE=F.PLACE;}
(6)F→(E) { F.PLACE=E.PLACE;}
(7)F→id {P=LOOKUP(id.name)
F.PLACE=P;}
构造其用于SLR(1)分析的识别活前缀的DFA以及action表和goto表。然后编程实现。(关于词法分析部分只需识别出与此文法相关的单词即可(+,*,(,),id,=))。
4.程序设计提示:
(1)分析栈设计时可以用一个栈完成,也可以设计三个栈:一个符号栈,一个状态栈,一个语义栈,归约时,则需要在符号栈中退掉n个符号,在状态栈中退掉n个符号(n为产生式符号个数),语义栈中退掉n个符号对应的语义;
(2)终结符表和非终结符表的组织和预测分析程序中相同(将符号对应到一个数字,表示在分析表中对应的下标)。
(3)action表中的错误处理:简化的错误处理:当查找action表出现空白时,则当前单词无法移进和规约,可简单的认为当前单词为多余的单词,则抛弃当前单词,读下一单词继续分析。
5.测试数据:
作为程序测试数据,以赋值语句area=r*r+r$作为测试输入(源程序)。程序要求输出二元式序列、符号表、语法分析过程、四元式序列。
假设AA.TXT的文件内容如下:
int area,r;
area=r*r+r;
程序运行情况如下:
请输入源文件名称:E:\AA.TXT<回车>
语法分析过程如下:
状态栈 符号栈
语义栈 动作说明
源程序对应的二元式如下:
(int,-)
(id,0)
(,,-)
(id,1)
(;,-)
(id,0)
(=,-)
(id,1)
(*,-)
(id,1)
(+,-)
(id,1)
(;,-)
符号表如下:
0area
1r
源程序对应的四元式序列如下:
(*,r,r,T1)
(+,T1,r,T2)
(=,T2,,area)
分析过程完成。
PS:单表达式和赋值语句SLR表
状态 | ACTION | GOTO | ||||||||||
i | = | + | * | ( | ) | ; | # | A | E | T | F | |
0 | S1 | |||||||||||
1 | S2 | |||||||||||
2 | S7 | S6 | 3 | 4 | 5 | |||||||
3 | S9 | S8 | ||||||||||
4 | R2 | S10 | R2 | R2 | ||||||||
5 | R4 | R4 | R4 | R4 | ||||||||
6 | S7 | S6 | 11 | 4 | 5 | |||||||
7 | R6 | R6 | R6 | R6 | ||||||||
8 | ACC 0 | |||||||||||
9 | S7 | S6 | 12 | 5 | ||||||||
10 | S7 | S6 | 13 | |||||||||
11 | S9 | S14 | ||||||||||
12 | R1 | S10 | R1 | R1 | ||||||||
13 | R3 | R3 | R3 | R3 | ||||||||
14 | R5 | R5 | R5 | R5 |
相关文章推荐
- 编译原理课程设计_C--编译器_语法分析&代码生成 - Justin
- 编译原理课程设计之词法分析器
- 编译原理课程设计---用java写的SNLCompiler(简单嵌套语言SNL的编译程序)
- 编译原理课程设计_C--编译器_语法分析&代码生成
- 代码高亮显示(编译原理课程设计)
- 编译原理课程设计-PL/0编译器的扩充(C语言完整版)
- 【编译原理】编译原理课程设计中遇到的问题及解决
- 编译原理 - 课程设计(简易语法分析器)
- 编译原理 - 课程设计(简易词法分析器)
- 求助!编译原理课程设计! 希望能得到方法!
- 编译原理课程设计之无符号数四则运算词法分析
- [编译原理课程设计] 程序示例一、词法分析器
- 【编译原理】:哈工大编译原理课程内容记录
- 按编译原理的思路设计的一个计算器
- 超级账本Hyperledger-Fabric本地编译与安装(来源于区块链-原理、设计与应用)
- 用antlr4来实现《按编译原理的思路设计的一个计算器》中的计算器
- 词法分析器——哈工大编译原理课程(一)
- 编译原理 实验3 递归下降语法分析程序设计
- 跟vczh看实例学编译原理——一:Tinymoe的设计哲学
- 吉首大学_编译原理实验题_基于预測方法的语法分析程序的设计【通过代码】