语法制导四元式(算术表达式)生成器(共11页).doc
《语法制导四元式(算术表达式)生成器(共11页).doc》由会员分享,可在线阅读,更多相关《语法制导四元式(算术表达式)生成器(共11页).doc(11页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上辽宁师范大学计算机与信息技术学院综合性实验报告课程名称: 编译技术 实验题目:语法制导四元式(算术表达式)生成器 学生姓名: 专业: 计算机科学与技术 学号: 实验日期: 2015.06.05 【实验目的】 1. 理解语法分析器原理、语法制导翻译的过程实质。2. 学会将语法分析所识别的语法成分变换为中间代码形式中的逆波兰记号形式的语义分析方法,编程实现在对一个算术表达式进行语法分析过程的基础上进行语义分析。 【实验内容】 1. 输入算术表达式源语言形式,输出语法分析过程(输入流变化过程)和四元式序列。2. 对于一个给定的算术表达式,首先通过词法分析过程识别出各类语法成
2、分输出至文件中,然后采用预测分析的方法对其进行分析和语法检查,并给出具体的分析过程,包括分析步骤、分析栈、剩余符号以及所用的产生式。在此基础上,向文法中插入语义动作,在语法分析过程中遇到语义动作就做相应的翻译工作,最终将结果(算术表达式的逆波兰式)输出到源文件中。【实验过程】一、判断文法是否为LL(1)文法(1)E-E+E (2)E-E*E (3)E-i|-E由于此文法含左递归,消除左递归,确定算法优先次序,使文法变为:(1)E-TG(2)G-+TG|(3)T-FS(4)S-*FS|(5)F-i|-E1.可推出的非终结符表为:EGTSF否是否是否2.各非终结符的FIRST集合如下:FIRST(
3、E)=(,iFIRST(G)=+, FIRST(T)=(,iFIRST(S)=*, FIRST(F)=(,i3.各非终结符的FOLLOW集合为:FOLLOW(E)=),#FOLLOW(G)=),#FOLLOW(T)=+,),#FOLLOW(S)=+,),#FOLLOW(F)=*,+,),#4.各产生式的SELECT集合为:SELECT(E-TG)=(,iSELECT(G-+TG)=+SELECT(G-)=),#SELECT(T-FS)=(,iSELECT(S-*FS)=*SELECT(S-)=+,),#SELECT(F-E)=(SELECT(F-i)=i5.因为:SELECT(G-+TG)SE
4、LECT(G-) = +),# = SELECT(S-*FS)SELECT(S-) = *+,),# = SELECT(F-E)SELECT(F-i) = i( = 所以文法是LL(1)文法。二、构造预测分析表i+*()-#ETGTG-EG+TGTFSFSS*FSFi(E)三、程序开始1.预测试的算术表达式:4+(-4.67e-10)*(-7.89)+5# 分析后:i+(-i)*(-i)+i#写入文件中。边分析边编织逆波兰式,用数组stack1存放。1. 存入9个文法产生式:E-TGE2-EG-+TGG2-T-FSS-*FSS2-F-iF2-(E)2. 存入预测分析表格(如二)3. 利用 终结
5、符数组:vt;非终结符数组:vn;预测分析表table;分析栈stack;等等,对待分析串str2进行分析,并将分许过程存入op.txt中。具体代码如下:#include#include#include#include char str220=0;/存放识别后的字符串“i+(-i)*(-i)+i#”FILE *op;/存储算术表达式的文件“a+(-4.67e-10)*(-7.89)+b#”FILE *fp;/存储分析过程的文件char vt7=i,+,*,(,),-,#; /终结符char vn5=E,G,T,S,F;/非终结符typedef struct type /产生式类型定义char
6、left; /非终结符char right5; /产生式右边字符 type;type E,E1,G,G1,T,S,S1,F,F1;/8个产生式type table77;/预分析表char stack30=0;/分析栈char stack130=0;/存储逆波兰式的int s=-1,st=0;/s-栈顶,st-当前需分析字符void analy1(char str1)/分析=i+(-i)*(-i)+i#int i=0,j=0,p=0,q=0;char s30=0;/辅助堆栈while(str1i!=#)switch(str1i)case a:str2j+=i;stack1q+=a; break;
7、case b:str2j+=i; stack1q+=sp-2; stack1q+=s-p;sp-=0;sp=0; stack1q+=b; break;case +:sp+=+;str2j+=+;break;case *:stack1q+=s-p;sp=0;str2j+=*;sp+=*;break;case (:str2j+=(;break;case ):stack1q+=s-p;sp=0; stack1q+=b; str2j+=);break;case -:sp+=; if(str2j-1=i)break; elsestr2j+=-; break;case .:stack1q+=.;if(st
8、r2j-1=i)break;else str2j+=i;break;case 0:stack1q+=0;if(str2j-1=i)break;else str2j+=i;break;case 1:stack1q+=1;if(str2j-1=i)break;else str2j+=i; break;case 2:stack1q+=2;if(str2j-1=i)break; else str2j+=i;break;case 3: stack1q+=3;if(str2j-1=i)break; else str2j+=i; break;case 4: stack1q+=4;if(str2j-1=i)b
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语法 制导 四元式 算术 表达式 生成器 11
限制150内