编译方法实验报告(中间代码生成器)

编译方法实验报告(中间代码生成器)

ID:41055459

大小:220.10 KB

页数:8页

时间:2019-08-15

编译方法实验报告(中间代码生成器)_第1页
编译方法实验报告(中间代码生成器)_第2页
编译方法实验报告(中间代码生成器)_第3页
编译方法实验报告(中间代码生成器)_第4页
编译方法实验报告(中间代码生成器)_第5页
资源描述:

《编译方法实验报告(中间代码生成器)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

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

2、TTàTω1F

3、FFài

4、(E)●文法变换:G’(E)EàT{ω0T}TàF

5、{ω1F}Fài

6、(E)●属性翻译文法:EàT{ω0“push(SYN,w)”T“QUAT”}TàF{ω1“push(SYN,w)”F“QUAT”}Fài“push(SEM,entry(w))”

7、(E)其中:push(SYN,w)—当前单词w入算符栈SYN;push(SEM,entry(w))—当前w在符号表中的入口值压入语义栈SEM;QUAT—生成四元式函数i.T=newtemp;ii.QT[j]=(SYN[k],SEM[s-1],SEM[s],T);j++;iii.pop(SYN,_);pop(SEM,_);pop(SEM,_);push(SEM,T);●递归下降子程序:数据结构:SYN

8、—算符栈;SEM—语义栈;一、数据结构设计使用递归的结构进行四元式的设计,同时,运用堆栈结构将四元式的输出序列打印出来while(exp[i]=='+'

9、

10、exp[i]=='-'){syn[++i_syn]=exp[i];//push(SYN,w)i++;//read(w)T();quat();}while(exp[i]=='*'

11、

12、exp[i]=='/'){syn[++i_syn]=exp[i];//push(SYN,w)i++;//read(w)F();quat();}voidquat(){strcpy(qt[j],"(,,,)");//QT[j]:=(SYN[k],SEM[s-1],S

13、EM[s],temp);qt[j][1]=syn[i_syn];qt[j][3]=sem[i_sem-1];qt[j][5]=sem[i_sem];qt[j][7]=temp;j++;i_syn--;//pop(SYN);i_sem--;//pop(SEM);i_sem--;//pop(SEM);sem[++i_sem]=temp;//push(SEM,temp);temp++;}一、关键代码分析(带注释)及运行结果#include#include"string.h"#include"stdio.h"usingnamespacestd;charsyn[10];//文法符号

14、栈inti_syn;charsem[10];//运算对象栈inti_sem;charexp[50];//算术表达式区inti;charqt[30][15];//四元式区intj=0;chartemp='q';//临时变量,取值为r--zintE();intT();intF();voidquat();//生成四元式函数intmain(intargc,char*argv[]){printf("pleaseinputyourexpression:");scanf("%s",exp);//输入四元式i=0;//read(w)E();if(exp[i]=='')for(i=0;i

15、输出四元式序列printf("%s",qt[i]);elseprintf("err");return0;}intE(){T();while(exp[i]=='+'

16、

17、exp[i]=='-'){syn[++i_syn]=exp[i];//push(SYN,w)i++;//read(w)T();quat();}return1;}intT(){F();while(exp[i]=='*'

18、

19、exp[i]=='/'){syn[++i_syn]=exp[i];//push(SYN,w)i++;//read(w)F();quat();}return1;}intF(){if(exp[i]=='('){i

20、++;//read(w)E();if(exp[i]!=')'){printf("err");return0;}}elseif((exp[i]>='a'&&exp[i]<='p')

21、

22、(exp[i]>='0'&&exp[i]<='9')){sem[++i_sem]=exp[i];}//push(SEM,w)else{printf("err");return0;}i++;//read(w)return1;}voi

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。