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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

编译原理实验报告LL1分析法.docx

1、编译原理实验报告LL1分析法编译原理实验报告LL(1)分析法 课 程 编译原理 实验名称 实验二 LL(1)分析法 实验目的 1掌握LL(1)分析法的基本原理; 2掌握LL(1)分析表的构造方法; 3掌握LL(1)驱动程序的构造方法。 一.实验内容及要求 根据某一文法编制调试LL(1)分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对预测分析LL(1)分析法的理解。 对下列文法,用LL(1)分析法对任意输入的符号串进行分析: (1)E-TG (2)G-+TG (3)G- (4)T-FS (5)S-*FS (6)S- (7)F-(E) (8)F-i 程序输入一以#结束的符号串(

2、包括+*()i#),如:i+i*i#。输出过程如下: 步骤 分析栈 剩余输入串 所用产生式 1 E i+i*i# E-TG . . . . 二.实验过程及结果 代码如下: #include #include edge.h using namespace std; edge:edge() cinleftright; rlen=right.length(); if(NODE.find(left)NODE.length() NODE+=left; string edge:getlf() return left; string edge:getrg() return right; string edg

3、e:getfirst() return first; string edge:getfollow() return follow; string edge:getselect() return select; string edge:getro() string str; str+=right0; return str; int edge:getrlen() return right.length(); void edge:newfirst(string w) int i; for(i=0;i if(first.find(wi)first.length() first+=wi; void ed

4、ge:newfollow(string w) int i; for(i=0;i if(follow.find(wi)follow.length()&wi!=) follow+=wi; void edge:newselect(string w) int i; for(i=0;i if(select.find(wi)select.length()&wi!=) select+=wi; void edge:delfirst() int i=first.find(); first.erase(i,1); int SUM; string NODE,ENODE; /计算first void first(ed

5、ge ni,edge *n,int x) int i,j; for(j=0;j if(ni.getlf()=nj.getlf() if(NODE.find(nj.getro() for(i=0;i if(ni.getlf()=nj.getro() first(ni,n,x); else nx.newfirst(nj.getro(); /计算follow void follow(edge ni,edge *n,int x) int i,j,k,s; string str; for(i=0;i s=NODE.find(ni.getrg()i); if(s-1) /是非终结符 if(i for(j=

6、0;j if(nj.getlf().find(ni.getrg()i)=0) if(NODE.find(ni.getrg()i+1) for(k=0;k if(nk.getlf().find(ni.getrg()i+1)=0) nj.newfollow(nk.getfirst(); if(nk.getfirst().find() nj.newfollow(ni.getfollow(); else str.erase(); str+=ni.getrg()i+1; nj.newfollow(str); /计算select void select(edge &ni,edge *n) int i,j;

7、 if(ENODE.find(ni.getro() ni.newselect(ni.getro(); if(ni.getro()=) ni.newselect(ni.getfollow(); else for(i=0;i for(j=0;j if(ni.getrg()i=nj.getlf()0) ni.newselect(nj.getfirst(); if(nj.getfirst().find()nj.getfirst().length() return; /输出集合 void out(string p) int i; if(p.length()=0) return; cout for(i=0

8、;i cout cout /连续输出符号 void outfu(int a,string c) int i; for(i=0;i cout /输出预测分析表 void outgraph(edge *n,string (*yc)50) int i,j,k; bool flag; for(i=0;i if(ENODEi!=) outfu(10, ); cout outfu(10, ); cout int x; for(i=0;i outfu(4, ); cout outfu(5, ); for(k=0;k flag=1; for(j=0;j if(NODEi=nj.getlf()0) x=nj.g

9、etselect().find(ENODEk); if(x-1) cout ycik=nj.getrg(); outfu(9-nj.getrlen(), ); flag=0; x=nj.getselect().find(#); if(k=ENODE.length()-1&x-1) cout ycij=nj.getrg(); if(flag&ENODEk!=) outfu(11, ); cout /分析符号串 int pipei(string &chuan,string &fenxi,string (*yc)50,int &b) char ch,a; int x,i,j,k; b+; cout9

10、) outfu(8, ); else outfu(9, ); cout-1) if(ch=a) fenxi.erase(fenxi.length()-1,1); chuan.erase(0,1); cout fenxi.erase(fenxi.length()-1,1); if(pipei(chuan,fenxi,yc,b) return 1; else return 0; else i=NODE.find(ch); if(a=#) x=ENODE.find(); if(x-1) j=ENODE.length()-1; else j=ENODE.length(); else j=ENODE.f

11、ind(a); if(ycij.length() cout-1;k-) if(ycijk!=) fenxi+=ycijk; if(pipei(chuan,fenxi,yc,b) return 1; else return 0; else return 0; void main() edge *n; string str,(*yc)50; int i,j,k; bool flag=0; cinSUM; coutNODE.length()&ENODE.find(strj)ENODE.length() ENODE+=strj; /计算first集合 for(i=0;inj.getfirst().length() ni.delfirst(); break; for(k=0;k outfu(SUM, ); coutchuan; fchuan=chuan; fenxi=#; fenxi+=NODE0; i=0; cout outfu(7, ); cout outfu(10, ); cout outfu(8, ); cout if(pipei(chuan,fenxi,yc,i) cout else cout 截屏如下: 三.实验中的问题及心得 这次实验让我更加熟悉了LL(1)的工作流程以及LL(1)分析表的构造方法。以前课堂上搞不懂的算法流程通过实验都能得到进一步的了解。

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

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