(最新整理)编译方法实验报告(中间代码生成器的设计)_第1页
(最新整理)编译方法实验报告(中间代码生成器的设计)_第2页
(最新整理)编译方法实验报告(中间代码生成器的设计)_第3页
(最新整理)编译方法实验报告(中间代码生成器的设计)_第4页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、(完整)编译方法实验报告(中间代码生成器的设计)(完整)编译方法实验报告(中间代码生成器的设计) 编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整)编译方法实验报告(中间代码生成器的设计))的内容能够给您的工作和学习带来便利。同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快 业绩进步,以下为(完整)编译方法实验报告(中间代码生成器的设计)的全部内容。编译方法实验报告姓 名

2、学 号班 级指 导 教 师实验名称中间代码生成器的设计开 设 学 期实 验 时 间第周评 定 成 绩评定人签字评 定 日 期2011年10月一、 实验目的熟悉算术表达式的语法分析与中间代码生成原理.二、 实验内容(1)设计语法制导翻译生成表达式的四元式的算法;(2)编写代码并上机调试运行通过.输入算术表达式;输出语法分析结果;相应的四元式序列。(3)设计ll(1)分析法或lr(0)分析法的属性翻译文法,并根据这些属性翻译文法,使用扩展的语法分析器实现语法制导翻译。三、 实验原理及基本步骤算术表达式文法:g(e): e e 0 t t t t 1 f | ff i | (e)文法变换:g(e)

3、e t 0 t t f 1 ff i (e)属性翻译文法:e t 0 “push(syn, w)” t “quat t f 1 “push(syn, w)” f “quat”f i “push(sem, entry(w) | (e)其中:push(syn, w) - 当前单词w入算符栈syn;push(sem, entry(w)) - 当前w在符号表中的入口值压入语义栈sem; quat 生成四元式函数 it = newtemp; iiqtj =( synk, sems1, sems, t); j+; iiipop( syn, _ ); pop( sem, _ ); pop( sem, _ )

4、; push( sem, t );递归下降子程序:数据结构:syn -算符栈;sem 语义栈;四、 数据结构设计 使用递归的结构进行四元式的设计,同时,运用堆栈结构将四元式的输出序列打印出来while ( expi=+ | expi=-)syn+i_syn=expi; /push(syn,w)i+; /read(w)t();quat();while ( expi=* | expi=/)syn+i_syn=expi; /push(syn,w)i+; /read(w)f();quat();void quat()strcpy(qtj,(, , , )”); /qtj:=(synk,sems-1,se

5、ms,temp);qtj1=syni_syn;qtj3=semi_sem-1;qtj5=semi_sem;qtj7=temp;j+;i_syn-; /pop(syn);i_sem-; /pop(sem);i_sem; /pop(sem);sem+i_sem=temp; /push(sem,temp); temp+;五、 关键代码分析(带注释)及运行结果include iostream#include string.h#include stdio.h”using namespace std;char syn10; /文法符号栈int i_syn;char sem10; /运算对象栈int i_s

6、em;char exp50; /算术表达式区int i;char qt3015; /四元式区int j=0;char temp=q; /临时变量,取值为rzint e();int t();int f();void quat(); /生成四元式函数int main(int argc, char* argv)printf(”please input your expression:); scanf(”%s,exp); /输入四元式i=0; /read(w) e();if (expi=0)for (i=0;i=a & expi=p)(expi=0 & expi=9)sem+i_sem=expi; /

7、push(sem,w)elseprintf(err”);return 0;i+; /read(w)return 1;void quat()strcpy(qtj,”( , , , )”); /qtj:=(synk,sems-1,sems,temp);qtj1=syni_syn;qtj3=semi_sem1;qtj5=semi_sem;qtj7=temp;j+;i_syn; /pop(syn);i_sem; /pop(sem);i_sem-; /pop(sem);sem+i_sem=temp; /push(sem,temp); temp+;六、 总结与分析我们知道,定义一种语言除了要求定义语法外,

8、还要求定义语义,即对语言的各种语法单位赋予具体的意义。语义分析的任务是首先对每种语法单位进行静态的语义审查,然后分析其含义,并用另一种语言形式,即比源语言更加接近于目标语言的一种中间代码来进行描述这种语言。因此,中间代码就显得十分重要,它关系着整个程序语言的正确编译与否,同时也是进行下一步编译的重要先决条件。七、 实验思考题(1)自顶向下法(推导法)从开始符号出发,采用推导运算,试图自顶向下构造语法树. 自底向上法(归约法) 从给定的符号串出发,采用归约运算,试图自底向上构造语法树。(2)递归下降子程序法:递归子程序法属于自顶向下语法分析方法。故又名递归下降法。要求文法是ll(1)文法. ll

9、(1)分析法:ll(1)分析法是指从左到右扫描(第一个 l) 、最左推导(第二个 l)和只查看一个当前符号(括号中的 1)之意;ll(1)分析法又称预测分析法,属于自顶向下确定性语法分析方法。要求文法是ll(1)文法.(3)相同点:都要求文法是ll(1)文法;都是自顶向下的分析方法;都通过分析下个字符来判断该进入哪个状态或者调用哪个函数。 不同点:ll(1)分析法先建立起预测分析表,通过对分析栈的不断操作(出栈,入栈)来进行;递归下降子程序法是通过函数间的函数调用来实现不同状态间的转换,并简化了代码。(4)语法制导翻译是在语法分析过程中,随着分析(推导或归约)的逐步进展,每识别出一个语法结构,根据文法的每个规则所对应的语义子程序进行翻译的方法;核心技术是构造属性翻译文法。(5)假定:sem(m)- 语义栈(属性传递、赋值场所);qtq 四元式区;g(e):e t | e+tgeq(+) e-tgeq() t - f tfgeq(*) | t/f

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论