编译原理语义分析程序设计

上传人:xian****hua 文档编号:138026924 上传时间:2022-08-19 格式:DOC 页数:9 大小:29KB
收藏 版权申诉 举报 下载
编译原理语义分析程序设计_第1页
第1页 / 共9页
编译原理语义分析程序设计_第2页
第2页 / 共9页
编译原理语义分析程序设计_第3页
第3页 / 共9页
资源描述:

《编译原理语义分析程序设计》由会员分享,可在线阅读,更多相关《编译原理语义分析程序设计(9页珍藏版)》请在装配图网上搜索。

1、实验3 语义分析程序设计【实验目的】加深对语法制导翻译原理的理解,掌握将语法分析所识别的语法成分变换为中间代码的语义翻译方法。【实验内容】采用递归下降语法制导翻译法,对算术表达式、赋值语句进行语义分析并生成四元式序列。置初值调用scaner读下一个单词符号调用lrparser结束【设计思路】1、流程图输出四元式图2.1递归下降分析程序示意图2、源程序代码(1)scan.h /头文件-扫描程序#include#includechar prog80,token8;char ch;int syn,p,m,n,sum; /p是缓冲区prog的指针,m是token的指针char *rwtab6=begi

2、n,if,then,while,do,end;void scanner() /词法扫描程序memset(token,0,sizeof(token);/清空数组tokenm=0;while(ch= )+p;ch=progp; /读下一个字符;if(ch=a&ch=A&ch=a&ch=A&ch=0&ch=9)tokenm+=ch;+p;ch=progp;/读下一个字符;tokenm+=0;syn=10;for(n=0;n=0&ch=0&ch=9)sum=sum*10+ch-0;/将ch转换为数字+p;ch=progp;syn=11;elseswitch(ch)/其他字符情况case)syn=21;

3、+m;tokenm=ch;else if(ch=)syn=22;+m;tokenm=ch;elsesyn=20;break;case:token0=ch;+p;ch=progp;if(ch=)syn=24;token0=ch;elsesyn=23;break;case:token0=ch;+p;ch=progp;if(ch=)syn=18;+m;tokenm=ch;+p;ch=progp;elsesyn=17;break;case+:syn=13;token0=ch;ch=prog+p;break;case-:syn=14;token0=ch;ch=prog+p;break;case*:syn

4、=15;token0=ch;ch=prog+p;break;case/:syn=16;token0=ch;ch=prog+p;break;case=:syn=25;token0=ch;ch=prog+p;break;case;:syn=26;token0=ch;ch=prog+p;break;case(:syn=27;token0=ch;ch=prog+p;break;case):syn=28;token0=ch;ch=prog+p;break;case#:syn=0; token0=ch;ch=prog+p;break;default:syn=-1;(2)yuyi.cpp / 语法分析主程序

5、#include#includescan.hint kk=0,q=0,k=0;structchar result8;char agl8;char op8;char ag28;quad20;int lrparser();int yucu();int statement();char * expression(void);char * term();char * factor();char * newtemp(void);void emit(char *result,char *agl,char *op,char *ag2);void main()kk=0;rewind(stdin);memset

6、(prog,0,sizeof(prog);/清空数组progp=0;printf(n please input string:n);doch=getchar();progp+=ch;while(ch!=#);p=0;ch=prog0;scanner();lrparser();for(int i=0;iq;+i)printf(%s=%s%s%sn,quadi.result,quadi.agl,quadi.op,quadi.ag2);int lrparser()int schain=0;kk=0;if(1=syn)scanner();schain=yucu();if(6=syn)scanner()

7、;if(0=syn|0=kk)printf(success!n);elseif(kk!=1) printf(缺end!);kk=1;elseprintf(缺begin!);kk=1;return schain;int yucu() /语句串分析函数int schain=0;schain=statement();while(26=syn)scanner();schain=statement();return schain;int statement()char tt8,eplace8;int schain=0;switch(syn)case 10:strcpy(tt,token);scanner

8、();if(18=syn)scanner();strcpy(eplace,expression();emit(tt,eplace,);schain=0;else printf(缺赋值号!);kk=1;return schain;break;char * expression(void)/表达式分析函数char *tp,*ep2,*eplace,*tt;tp=(char *)malloc(12);ep2=(char *)malloc(12);eplace=(char *)malloc(12);tt=(char *)malloc(12);strcpy(eplace,term();while(13=

9、syn)|(14=syn)strcpy(tt,token);scanner();strcpy(ep2,term();strcpy(tp,newtemp();emit(tp,eplace,tt,ep2);strcpy(eplace,tp);return eplace;char *term(void)char *tp,*ep2,*eplace,*tt;tp=(char *)malloc(12);ep2=(char *)malloc(12);eplace=(char *)malloc(12);tt=(char *)malloc(12);strcpy(eplace,factor();while(15=

10、syn)|(16=syn)strcpy(tt,token);scanner();strcpy(ep2,factor();strcpy(tp,newtemp();emit(tp,eplace,tt,ep2);strcpy(eplace,tp);return eplace;char *factor(void)char *fplace;fplace=(char *)malloc(12);strcpy(fplace, );if(10=syn)strcpy(fplace,token);scanner();else if(11=syn)itoa(sum,fplace,10);scanner();else

11、if(27=syn)scanner();fplace=expression();if(28=syn)scanner();elseprintf()错误!);kk=1;elseprintf(错误!);kk=1;return fplace;char * newtemp(void)char *p;char m8;p=(char *)malloc(8);k+;itoa(k,m,10);strcpy(p+1,m);p0=t;return p;void emit(char *result,char *agl,char *op,char *ag2) /生成三地址语句送到四元式表中strcpy(quadq.result,result);strcpy(quadq.agl,agl);strcpy(quadq.op,op);strcpy(quadq.ag2,ag2);q+;

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!