编译原理报告三四元式

上传人:宝路 文档编号:22287894 上传时间:2017-11-26 格式:DOCX 页数:8 大小:94.36KB
返回 下载 相关 举报
编译原理报告三四元式_第1页
第1页 / 共8页
编译原理报告三四元式_第2页
第2页 / 共8页
编译原理报告三四元式_第3页
第3页 / 共8页
编译原理报告三四元式_第4页
第4页 / 共8页
编译原理报告三四元式_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《编译原理报告三四元式》由会员分享,可在线阅读,更多相关《编译原理报告三四元式(8页珍藏版)》请在金锄头文库上搜索。

1、四元式生成一、 目的和要求1、目的通过上机实习,加深对语法制导翻译原理的理解,掌握将语法分析所识别的语法范畴变换为某种中间代码的语义翻译方法。2、要求(1 ) 选用目前世界上普遍采用的语义分析方法语法制导翻译技术。(2 )语义分析对象重点考虑经过语法分析后已是正确的语法范畴,实习重点是语义子程序。(3 ) 中间代码选用比较常见的形式,例如四元式。二、背景知识属性文法:A=(G,V,F),其中: G:一个 CFG, 属性文法的基础。V:有穷的属性集:每个属性与一个文法符号相关联,这些属性代表与文法符号相关的语义信息,如:类型、地址、值、代码、符号表内容等等。属性与变量一样,可以进行计算和传递,属

2、性加工的过程即是语义处理的过程。属性加工与语法分析同时进行。属性的表示:标始符(或数) ,写在相应文法的下边,点记法:E.Val,E.Place,E.Type。F:关于属性的属性断言或一组属性的计算规则( 称为语义规则)。断言或语义规则与一个产生式相联,只引用该产生式左端或右端的终结符或非终结符相联的属性。属性有两类:综合属性:归约型属性,用于“自下而上”传递信息。继承属性:推导型属性,用于“自上而下”传递信息。综合属性的例子:非终结符 E、T 及 F 都有一个综合属性 val,符号 digit 有一个综合属性,它的值由词法分析器提供。与产生式 LE 对应的语义规则仅仅是打印由 E 产生的算术

3、表达式的值的一个过程,我们可认为这条规则定义了 L 的一个虚属性。某些非终结符加上标是为了区分一个产生式中同一非终结符多次出现。设表达式为 35+4,则语义动作打印数值 19。L属性文法:一个属性文法称为 L属性文法,如果对于每个产生式 AX1X2Xn,满足:1、 Xj(1jn )的继承属性仅依赖于下述属性值中的一种:A 的继承属性或产生式右部位 v 于 Xj 左边的符号 X1,X2 ,Xj-1 的属性。2、A 的综合属性,仅依赖于下述属性值中的一种: A 的继承属性或产生式右部符号 Xj (除自身外)的任意属性。 L属性文法的翻译器通常可借助于 LL 分析器实现。在 L属性文法的基础上, L

4、L 分析器可以改造为一个翻译器,在对输入串进行语法分析的同时对属性进行计算。需要对 LL 分析器增加语义栈,以保存与栈中文法符号有关的继承属性值。每当进行推导时,新的属性值就由栈中正在推导的产生式左边符号的属性值来计算。 S属性文法:一个属性文法称为 S属性文法,当且仅当满足如下条件:1、所有非终结符的属性是综合属性;2、同一产生式中相同符号的各综合属性之间无相互依赖关系;3、如果 q 是某个产生式中文法符号 V 的继承属性,则属性 q 的值仅仅依赖于该产生式右部位于 V 左边的符号的属性。S属性文法的翻译器通常可借助于 LR 分析器实现。 在 S属性文法的基础上,LR 分析器可以改造为一个翻

5、译器,在对输入串进行语法分析的同时对属性进行计算。语法制导翻译的基本思想:为每个产生式配上一个语义子程序, (该子程序描述了一个产生式所对应的翻译工作。这些工作包括:生成中间代码,查填有关的符号表,检查和报错,修改编译程序某些工作变量的值等) 。在语法分析过程中,每当一个产生或用于匹配式进行归约时,就调用该产生式所对应的语义子程序,以完成即定的翻译任务。基础源文法和基础目标文法:SDTS 的基础源文法( 输入文法)一个 CFG:(V T,V N,P, S),其中 P=A w|Aw,y 属于 R)。SDTS 的基础目标文法( 输出文法)一个 CFG:(V N, ,P, S),其中 P=A y|A

6、w,y 属于 R)。SDTS 的形式化定义:SDTS 是一个 CFG,是一个五元组T=( VT,V N, ,R ,S),其中:1、 VT 是有穷的输入字母表(包含源语言中的符号) ; 2、 VN 是有穷的非终结符集;3、 是有穷的输出字母表(包含出现在输出串中的符号) ;4、 R 是形如 Aw,y 的规则的有穷集合;R 中规则形式: Aw,y A V N,w(V TV N)*,y(V N )*且 y 中那组非终结符是 w 中那组非终结符的置换。W:规则的源成分 y:规则的翻译成分。5、 S V N,是文法的开始符号。主要的中间代码有:逆波兰、四元式、三元式、间接三元式、树。三、实验内容语法制导

7、翻译是在语法分析的基础上增加语义操作来实现翻译的。原则上每个产生式对应一个语义子程序。在语法分析的过程中,当一个产生式获得匹配或进行归约时,相应的语义子程序便开始工作,生成中间代码,查填有关表格,检查并报告源程序中的错误,修改编译程序某些变量的值。高级语言的语法结构类型很多,从实习的角度可分为以下六类: 说明语句。如各种数据类型说明(整型、实型、布尔型、字符型、复型、双精度型、枚举、子界、数组、集合、文件、记录、指针等) ,各种数据空间特性说明(如公用语句,共名语句,等价语句等) ,初值语句。实习重点是内存空间的分配方法。 顺序结构语句。典型代表是各类表达式(如算术表达式、布尔表达式、字符表达

8、式、位表达)及相应的赋值语句。实习重点是算术表达式的翻译方法。 控制结构语句。常见的有转移语句、条件语句和各种分叉语句。实习重点是拉链返填的方法。 子程序结构。指子程序、函数、过程这类结构的定义和调用。实习重点是哑实结合的方法。 循环结构。如计数循环、条件循环等。实习重点是循环化简的方法。 格式语句。主要指输入输出语句的格式加工。实习重点是数据编辑的方法。根据教学要求可从以上六类中选择一至三类实习。四、设计思路模块结构:(1 )定义部分:定义常量、变量、数据结构。(2 )初始化:设立算符优先分析表、初始化变量空间(包括堆栈、结构体、数组、临时变量等) ;(3 )控制部分:从键盘输入一个表达式符

9、号串;(4 )利用算符优先分析算法进行表达式处理:根据算符优先分析表对表达式符号串进行堆栈(或其他)操作,输出分析结果,如果遇到错误则显示错误信息。(5 )对生成的逆波兰式进行计算。五、注意事项1.表达式中允许使用运算符(+-*/ ) 、分割符(括号) 、字符 i,结束符#;2.如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好) ;3.测试用的表达式事先放在文本文件中,一行存放一个表达式,同时以分号分割。同时将预期的输出结果写在另一个文本文件中,以便和输出进行对照;六、相关代码#include#include #include using namespace std; #define

10、 MAX 100 int m=0,sum=0;/sum 用于计算运算符的个数 /m 用于标记输入表达式中字符的个数 char JG=A; char strMAX;/用于存输入表达式 int token=0;/左括号的标志 /*用于更改计算后数组中的值*/ void change(int e) int f=e+2; char ch=strf; if(ch=A&ch=A&strein; coutendl; if (fin=fopen(in,r)=NULL) /判断输入文件名是否正确 coutendl打开词法分析输入文件出错 !endl; cout四元式如下:endl; scan(fin);/调用函数从文件中读入表达式 /*调用生成四元式的函数 */ siyuanshi(); /*判断是否成功*/ if(sum=0) cout成功!endl; else cout有错误!endl; /关闭文件 fclose(fin); 运行结果:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号