欢迎来到天天文库
浏览记录
ID:53800836
大小:71.50 KB
页数:11页
时间:2020-04-07
《编译原理语义分析实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、.语义分析实验报告一、实验目的:通过上机实习,加深对语法制导翻译原理的理解,掌握将语法分析所识别的语法成分变换为中间代码的语义翻译方法。二、实验要求:采用递归下降语法制导翻译法,对算术表达式、赋值语句进行语义分析并生成四元式序列。三、算法思想:1、设置语义过程。(1)emit(char*result,char*ag1,char*op,char*ag2)该函数的功能是生成一个三地址语句送到四元式表中。四元式表的结构如下:struct{charresult[8];charag1[8];charop[8];charag2[8];}quad[20];(2
2、)char*newtemp()该函数回送一个新的临时变量名,临时变量名产生的顺序为T1,T2,…char*newtemp(void){char*p;charm[8];p=(char*)malloc(8);k++;itoa(k,m,10);strcpy(p+1,m);p[0]=’t’;return(p);}2、函数lrparser在原来语法分析的基础上插入相应的语义动作:将输入串翻译成四元式序列。在实验中我们只对表达式、赋值语句进行翻译。..一、源程序代码:#include#include#include3、stream.h>#includestruct{charresult[12];charag1[12];charop[12];charag2[12];}quad;charprog[80],token[12];charch;intsyn,p,m=0,n,sum=0,kk;//p是缓冲区prog的指针,m是token的指针char*rwtab[6]={"begin","if","then","while","do","end"};voidscaner();char*factor(void);char*term(void);char*4、expression(void);intyucu();voidemit(char*result,char*ag1,char*op,char*ag2);char*newtemp();intstatement();intk=0;voidemit(char*result,char*ag1,char*op,char*ag2){strcpy(quad.result,result);strcpy(quad.ag1,ag1);strcpy(quad.op,op);strcpy(quad.ag2,ag2);..cout<5、ad.ag1<='a'&&ch<='z')6、7、(ch>='A'&&ch<='Z')){m=0;while((8、ch>='0'&&ch<='9')9、10、(ch>='a'&&ch<='z')11、12、(ch>='A'&&ch<='Z')){token[m++]=ch;ch=prog[p++];}token[m++]=' ';..p--;syn=10;for(n=0;n<6;n++)if(strcmp(token,rwtab[n])==0){syn=n+1;break;}}elseif((ch>='0'&&ch<='9')){{sum=0;while((ch>='0'&&ch<='9')){sum=sum*10+ch-'0';ch=prog[p++];}}p--;s13、yn=11;if(sum>32767)syn=-1;}elseswitch(ch){case'<':m=0;token[m++]=ch;ch=prog[p++];if(ch=='>'){syn=21;token[m++]=ch;}elseif(ch=='=')..{syn=22;token[m++]=ch;}else{syn=23;p--;}break;case'>':m=0;token[m++]=ch;ch=prog[p++];if(ch=='='){syn=24;token[m++]=ch;}else{syn=20;p--;}break;ca14、se':':m=0;token[m++]=ch;ch=prog[p++];if(ch=='='){syn=18;token[m++]=c
3、stream.h>#includestruct{charresult[12];charag1[12];charop[12];charag2[12];}quad;charprog[80],token[12];charch;intsyn,p,m=0,n,sum=0,kk;//p是缓冲区prog的指针,m是token的指针char*rwtab[6]={"begin","if","then","while","do","end"};voidscaner();char*factor(void);char*term(void);char*
4、expression(void);intyucu();voidemit(char*result,char*ag1,char*op,char*ag2);char*newtemp();intstatement();intk=0;voidemit(char*result,char*ag1,char*op,char*ag2){strcpy(quad.result,result);strcpy(quad.ag1,ag1);strcpy(quad.op,op);strcpy(quad.ag2,ag2);..cout<5、ad.ag1<='a'&&ch<='z')6、7、(ch>='A'&&ch<='Z')){m=0;while((8、ch>='0'&&ch<='9')9、10、(ch>='a'&&ch<='z')11、12、(ch>='A'&&ch<='Z')){token[m++]=ch;ch=prog[p++];}token[m++]=' ';..p--;syn=10;for(n=0;n<6;n++)if(strcmp(token,rwtab[n])==0){syn=n+1;break;}}elseif((ch>='0'&&ch<='9')){{sum=0;while((ch>='0'&&ch<='9')){sum=sum*10+ch-'0';ch=prog[p++];}}p--;s13、yn=11;if(sum>32767)syn=-1;}elseswitch(ch){case'<':m=0;token[m++]=ch;ch=prog[p++];if(ch=='>'){syn=21;token[m++]=ch;}elseif(ch=='=')..{syn=22;token[m++]=ch;}else{syn=23;p--;}break;case'>':m=0;token[m++]=ch;ch=prog[p++];if(ch=='='){syn=24;token[m++]=ch;}else{syn=20;p--;}break;ca14、se':':m=0;token[m++]=ch;ch=prog[p++];if(ch=='='){syn=18;token[m++]=c
5、ad.ag1<='a'&&ch<='z')
6、
7、(ch>='A'&&ch<='Z')){m=0;while((
8、ch>='0'&&ch<='9')
9、
10、(ch>='a'&&ch<='z')
11、
12、(ch>='A'&&ch<='Z')){token[m++]=ch;ch=prog[p++];}token[m++]=' ';..p--;syn=10;for(n=0;n<6;n++)if(strcmp(token,rwtab[n])==0){syn=n+1;break;}}elseif((ch>='0'&&ch<='9')){{sum=0;while((ch>='0'&&ch<='9')){sum=sum*10+ch-'0';ch=prog[p++];}}p--;s
13、yn=11;if(sum>32767)syn=-1;}elseswitch(ch){case'<':m=0;token[m++]=ch;ch=prog[p++];if(ch=='>'){syn=21;token[m++]=ch;}elseif(ch=='=')..{syn=22;token[m++]=ch;}else{syn=23;p--;}break;case'>':m=0;token[m++]=ch;ch=prog[p++];if(ch=='='){syn=24;token[m++]=ch;}else{syn=20;p--;}break;ca
14、se':':m=0;token[m++]=ch;ch=prog[p++];if(ch=='='){syn=18;token[m++]=c
此文档下载收益归作者所有