实验三:语义分析程序的设计

实验三:语义分析程序的设计

ID:12153135

大小:80.50 KB

页数:12页

时间:2018-07-15

实验三:语义分析程序的设计_第1页
实验三:语义分析程序的设计_第2页
实验三:语义分析程序的设计_第3页
实验三:语义分析程序的设计_第4页
实验三:语义分析程序的设计_第5页
资源描述:

《实验三:语义分析程序的设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实验三语义分析程序的设计一、实验目的:加深对语法分析器工作过程的理解;能够采用一种编程语言实现简单的语义分析程序;能够使用自己编写的分析程序对简单的程序段进行语义分析,生成中间代码。二、实验内容:在实验2的基础上,用递归下降分析法编制语义分析程序,语义分析程序的实现可以采用任何一种编程工具。三、实验要求:1.对语法规则有明确的定义;2.编写的分析程序能够对实验二的结果进行正确的语义分析;3.*对于遇到的语法、语义错误,能够做出简单的错误处理,给出简单的错误提示,保证语义分析过程;4.实验报告要求用文

2、法的形式对语义详细说明,说明语义分析程序的工作过程,说明相应翻译动作的实现*。四、实验学时:4学时五、实验步骤:1.定义语法规则;2.设置语义过程,插入语义动作;3.*对遇到的语法、语义错误做出错误处理。六、选作实验内容学生可以根据自身的情况完善语义分析程序的错误处理功能,如对遇到的语义错误给出准确的位置和错误类型提示;或者给出语义分析程序的分析报告。附:算法思想:1、设置语义过程。(1)emit(char*result,char*ag1,char*op,char*ag2)该函数的功能是生成一个三地

3、址语句送到四元式表中。四元式表的结构如下:struct{charresult[8];charag1[8];charop[8];charag2[8];}quad[20];(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在

4、原来语法分析的基础上插入相应的语义动作:将输入串翻译成四元式序列。在实验中我们只对表达式、赋值语句进行翻译。源程序代码:#include#include#include#includestruct{charresult[12];charag1[12];charop[12];charag2[12];}quad;charprog[80],token[12];charch;intsyn,p,m=0,n,sum=0,kk;//

5、p是缓冲区prog的指针,m是token的指针char*rwtab[6]={"begin","if","then","while","do","end"};voidscaner();char*factor(void);char*term(void);char*expression(void);intyucu();voidemit(char*result,char*ag1,char*op,char*ag2);char*newtemp();intstatement();intk=0;voidemit(c

6、har*result,char*ag1,char*op,char*ag2){strcpy(quad.result,result);strcpy(quad.ag1,ag1);strcpy(quad.op,op);strcpy(quad.ag2,ag2);cout<

7、);strcpy(p+1,m);p[0]='t';return(p);}voidscaner(){for(n=0;n<8;n++)token[n]=NULL;ch=prog[p++];while(ch==''){ch=prog[p];p++;}if((ch>='a'&&ch<='z')

8、

9、(ch>='A'&&ch<='Z')){m=0;while((ch>='0'&&ch<='9')

10、

11、(ch>='a'&&ch<='z')

12、

13、(ch>='A'&&ch<='Z')){token[m++]=ch;ch=

14、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--;syn=11;if(sum>32767)syn=-1;}elseswitch(

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

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

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