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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

南昌大学编译原理实验报告二.docx

1、南昌大学编译原理实验报告二南昌大学实验报告二实验类型:验证 综合设计 创新 实验日期:2013.5 实验成绩: 一、实验目的通过设计、编制、调试一个典型的语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,进一步掌握常用的语法分析中递归下降分析方法。二、实验内容设计一个文法的递归下降分析程序,判断特定表达式的正确性。三、实验要求1、 给出文法如下:GE E-T|E+T; T-F|T*F; F-i|(E);2、 根据该文法构造相应的LL(1)文法及LL(1)分析表,并为该文法设计预测分析程序,利用C语言或C+语言实现;3、 利用预测分析程序完成下列功能:1) 手工将测试的表达

2、式写入文本文件,每个表达式写一行,用“;”表示结束;2) 读入文本文件中的表达式;3) 调用实验一中的词法分析程序搜索单词;4) 把单词送入预测分析程序,判断表达式是否正确(是否是给出文法的语言),若错误,应给出错误信息;5) 完成上述功能,有余力的同学可以进一步完成通过程序实现对非LL(1)文法到LL(1)文法的自动转换。四、实验环境PC微机DOS操作系统或 Windows 操作系统Turbo C 程序集成环境或 Visual C+ 程序集成环境五、实验步骤1、 分析文法,将给出的文法转化为LL(1)文法;2、 学习预测分析程序的结构,设计合理的预测分析程序;3、 编写测试程序,包括表达式的

3、读入和结果的输出;4、 测试程序运行效果,测试数据可以参考下列给出的数据。六、测试数据 输入数据:编辑一个文本文文件expression.txt,在文件中输入如下内容: 10;1+2;(1+2)*3+(5+6*7);(1+2)*3+4;1+2+3+(*4+5);(a+b)*(c+d);(ab3+de4)*5)+1;正确结果:(1)10;输出:正确(2)1+2;输出:正确(3)(1+2)*3+(5+6*7);输出:正确(4)(1+2)*3+4输出:错误(5)1+2+3+(*4+5)输出:错误(6)(a+b)*(c+d)输出:正确(7)(ab3+de4)*5)+1输出:错误实验代码:以下分别用递归

4、下降和预测分析两种方法进行编程递归下降:#includeusing namespace std;char t100;char s100;int i, SIGN,j;void E();void E1();void E2();void T();void T1();void F();bool F1(char k);int main() cout请输入一个语句,以#号结束语句(直接输入#号推出)t; E2(); SIGN = 0; i=0; if( s0 = #) return 0; E(); if(si=#) cout正确语句!endl; cout请输入一个语句,以#号结束语句endl; retur

5、n 1;void E() if(SIGN=0) T(); E1(); void E1() if(SIGN=0) if(si=+) +i; T(); E1(); else if(si!=#&si!=) cout语句有误!endl; SIGN=1; void T() if(SIGN=0) F(); T1(); void T1() if(SIGN=0) if(si=*) +i; F(); T1(); else if(si!=#&si!=)&si!=+) cout语句有误!endl; SIGN=1; void F() if(SIGN=0) if(si=() +i; E(); if(si=) +i; e

6、lse if(si= #) cout语句有误!endl; SIGN=1; +i; else if(si=i) +i; else cout语句有误!=0&k=a&k=z)return true; else return false;实验截图:预测分析:#includeusing namespace std;char VT6=i,(,),*,+,#,;int ob56= 1,0,0,1,0,0, 0,1,0,0,2,2, 1,0,0,1,0,0, 0,2,1,0,2,2, 2,0,0,1,0,0;int p(char c) switch(c) caseE:return 0;break; caseB

7、:return 1;break; caseT:return 2;break; caseC:return 3;break; caseF:return 4;break; casei:return 0;break; case+:return 1;break; case*:return 2;break; case(:return 3;break; case):return 4;break; case#:return 5;break; default:return 6;break; bool V(char c) int i; for(i=0;i6;i+) if(c=VTi)return 1; retur

8、n 0;class LL1private: char s100; int j;public: LL1()s0=#;s1=E;j=1; char g()return sj; int gc()return j; void show()coutsjendl; void cj()j-; void change(int i) if(sj=E&i=1)sj+=B;sj=T; else if(sj=B&i=1)sj+=B;sj+=T;sj=+; else if(sj=B&i=2)j-; else if(sj=T&i=1)sj+=C;sj=F; else if(sj=C&i=1)sj+=C;sj+=F;sj=

9、*; else if(sj=C&i=2)j-; else if(sj=F&i=1)sj+=);sj+=E;sj=(; else if(sj=F&i=2)sj=i; else cout推导出错endl; ;void main() FILE *t; char in30; char a,c; coutin; if(t=fopen(in,r)!=NULL) break; else cout文件路径错误!请输入源文件名(包括路径和后缀名):; while(a=getc(t)!=EOF) LL1 S; cout原式a; if(p(a)=6)a=i;c=a; while(1) if(V(S.g() if(S

10、.g()=#&a=#)a=getc(t);break; else if(S.g()=a) S.cj(); while(1) c=a; a=getc(t); couta; if(a=;)a=#; if(p(a)=6)a=i; if(c!=i|a!=i)break; continue; else if(a=#)break; while(a!=;)a=getc(t);cout0) S.change(obp(S.g()p(a);continue; else if(a=#)break; while(a!=;)a=getc(t);couta; break; if(S.gc()=0)cout符合LL(1)文法endl; else a=getc(t);cout不符合LL(1)文法endl; system(pause);实验截图:

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

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