ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:103.15KB ,
资源ID:5405590      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5405590.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(编译原理实验报告实验二语法分析算符优先2.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

编译原理实验报告实验二语法分析算符优先2.docx

1、编译原理实验报告实验二语法分析算符优先2 华北水利水电学院 编译原理 实验报告一、 实验题目:语法分析(算符优先分析程序)(1)选择最有代表性的语法分析方法算符优先法;(2)选择对各种常见程序语言都用的语法结构,如赋值语句(尤指表达式)作为分析对象,并且与所选语法分析方法要比较贴切。二、 实验内容(1)根据给定文法,先求出FirstVt和LastVt集合,构造算符优先关系表(要求算符优先关系表输出到屏幕或者输出到文件);(2)根据算法和优先关系表分析给定表达式是否是该文法识别的正确的算术表达式(要求输出归约过程)(3)给定表达式文法为:G(E): E#E#EE+T | TTT*F |FF(E)

2、|i(4) 分析的句子为: (i+i)*i和i+i)*i三、 程序源代#include#include#include#include#define SIZE 128char priority66; /算符优先关系表数组char inputSIZE; /存放输入的要进行分析的句子char remainSIZE; /存放剩余串 char AnalyseStackSIZE; /分析栈void analyse();int testchar(char x); /判断字符X在算符优先关系表中的位置void remainString(); /移进时处理剩余字符串,即去掉剩余字符串第一个字符int k;vo

3、id init()/构造算符优先关系表,并将其存入数组中 priority00=; priority01=; priority02=; priority03=; priority05=; priority10=; priority11=; priority12=; priority13=; priority15=; priority20=; priority21=; priority22=$;/无优先关系的用$表示 priority23=$; priority24=; priority25=; priority30=; priority31=; priority32=; priority33=

4、; priority41=; priority42=$; priority43=$; priority44=; priority45=; priority50=; priority51=; priority52=; priority53=; priority54=$; priority55=;void analyse()/对所输入的句子进行算符优先分析过程的函数 FILE *fp; fp=fopen(li,a); int i,j,f,z,z1,n,n1,z2,n2; int count=0;/操作的步骤数 char a; /用于存放正在分析的字符 char p,Q,p1,p2; f=strle

5、n(input); /测出数组的长度 for(i=0;i) for( ; ; ) Q=AnalyseStackj; if(AnalyseStackj-1=+|AnalyseStackj-1=*|AnalyseStackj-1=i|AnalyseStackj-1=(|AnalyseStackj-1=)|AnalyseStackj-1=#) j=j-1; else j=j-2; z1=testchar(AnalyseStackj); n1=testchar(Q); p1=priorityz1n1; if(p1=) /把AnalyseStackj+1AnalyseStackk归约为N count+;

6、 printf(%d) %st%10ct%5c%17st 归约n,count,AnalyseStack,p,a,remain); fprintf(fp,(%d) %st%17st %sn,count,AnalyseStack,remain,归约); k=j+1; i-; AnalyseStackk=N; int r,r1; r=strlen(AnalyseStack); for(r1=k+1;r1r;r1+) AnalyseStackr1=0; break; else continue; else if(p=) /表示移进 count+; printf(%d) %st%10ct%5c%17st

7、 移进n,count,AnalyseStack,p,a,remain); fprintf(fp,(%d) %st%17st %sn,count,AnalyseStack,remain,移进); k=k+1; AnalyseStackk=a; remainString(); else if(p=) z2=testchar(AnalyseStackj); n2=testchar(#); p2=priorityz2n2; if(p2=) count+; printf(%d) %st%10ct%5c%17st 接受n,count,AnalyseStack,p,a,remain); fprintf(fp

8、,(%d) %st%17st %sn,count,AnalyseStack,remain,接受); printf(该句子是该文法的合法句子。n); fprintf(fp,%s,该句子是该文法的合法句子。n); break; else count+; printf(%d) %st%10ct%5c%17st 移进n,count,AnalyseStack,p,a,remain); fprintf(fp,(%d) %st%17st %sn,count,AnalyseStack,remain,移进); k=k+1; AnalyseStackk=a; remainString(); else printf

9、(错误!该句子不是该文法的合法句子!n); fprintf(fp,%s,错误!该句子不是该文法的合法句子。n); break; fclose(fp); int testchar(char x) int m; if(x=+) m=0; if(x=*) m=1; if(x=i) m=2; if(x=() m=3; if(x=) m=4; if(x=#) m=5; return m;void remainString() int i,j; i=strlen(remain); for(j=0;j#E#n); printf(1)E-E+Tn); printf(2)E-Tn); printf(3)T-T*

10、Fn); printf(4)T-Fn); printf(5)F-(E)n); printf(6)F-in); FILE *fp; fp=fopen(li,w); fprintf(fp,%s,要分析的文法为:n); fprintf(fp,%s,(0)E-#E#n); fprintf(fp,%s,(1)E-E+Tn); fprintf(fp,%s,(2)E-Tn); fprintf(fp,%s,(3)T-T*Fn); fprintf(fp,%s,(4)T-Fn); fprintf(fp,%s,(5)F-(E)n); fprintf(fp,%s,(6)F-in); fprintf(fp,%s,优先关

11、系表为:n); fprintf(fp,%s, + * i ( ) #n); for(m=0;m6;m+) fprintf(fp,%c ,s1m); for(n=0;n n); printf( * n); printf( i n); printf( ( n); printf( # =n); printf(-n); printf(请输入要进行分析的句子(以#号结束输入):n); gets(input);/将输入的字符串存到数组中 fprintf(fp,%s,需要分析的字符串为:n); fprintf(fp,%s,input); fprintf(fp,%s,n); fclose(fp); print

12、f(步骤 栈 优先关系 当前符号 剩余输入串 移进或归约n); k=0; AnalyseStackk=#; AnalyseStackk+1=0; int length,i; /初始化剩余字符串数组为输入串 length=strlen(input);/ for(i=0;ilength;i+) remaini=inputi; remaini=0; analyse();/对所输入的句子进行算符优先分析过程的函数四、测试结果输入串(i+i)*i的算符优先分析过程输入串i+i)*i的算符优先分析过程五、小结(包括收获、心得体会、存在的问题及解决问题的方法、建议等)本次实验是算符优先分析法,这种方法特别有利于表达式分析,宜于手工实现。算符优先分析过程是自下而上的规约过程,但这种规约未必是严格的最左规约,也就是说,算符优先分析法不是一种规范规约法。通过这次实验,我对编译原理的理解又加深了一步。本次试验很难,所以求助于网络和同学,然后经过自己的更改编辑,将结果存入名为li的文件中。虽然对编程依旧感觉很困难,但是经过这次实验,我对存写文件,以及算符优先分析法的理解与学习又上升了一个台阶。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1