版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一. 实验目的1掌握LL(1分析法的基本原理2掌握LL(1分析表的构造方法3掌握LL(1驱动程序的构造方法二. 实验内容及要求根据某一文法编制调试LL(1)分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对预测分析LL(1)分析法的理解。例:对下列文法,用LL(1)分析法对任意输入的符号串进行分析:(1)E-TG(2)G-+TG|TG (3)G-(4)T-FS(5)S-*FS|/FS(6)S-(7)F-(E(8)F-i输出的格式如下:(1LL(1)分析程序,编制人:姓名,学号,班级(2输入一以#结束的符号串(包括+*/()i#:在此位置输入符号串(3输出过程如下:步骤分析栈剩
2、余输入串所用产生式1Ei+i*i#E-TG(4输入符号串为非法符号串(或者为合法符号串备注:(1在“所用产生式”一列中如果对应有推导则写出所用产生式;如果为匹配终结符则写明匹配的终结符;如分析异常出错则写为“分析出错”;若成功结束则写为“分析成功”。(2 在此位置输入符号串为用户自行输入的符号串。(3上述描述的输出过程只是其中一部分的。注意:1表达式中允许使用运算符(+-*/)、分割符(括号)、字符i,结束符#;2如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好);3对学有余力的同学,测试用的表达式事先放在文本文件中,一行存放一个表达式,同时以分号分割。同时将预期的输出结果写在另一个
3、文本文件中,以便和输出进行对照;4可采用的其它的文法。三. 实验过程LL(1分析法的实验源程序代码如下:#include #include #include #include char A20;/*分析栈*/char B20;/*剩余串*/char v120=i,+,*,(,#;/*终结符 */char v220=E,G,T,S,F;/*非终结符 */int j=0,b=0,top=0,l;/*L为输入串长度 */typedef struct type/*产生式类型定义 */char origin;/*大写字符 */char array5;/*产生式右边字符 */int length;/*字符
4、个数 */type;type e,t,g,g1,s,s1,f,f1;/*结构体变量 */type C1010;/*预测分析表 */void print(/*输出分析栈 */int a;/*指针*/for(a=0;a=top+1;a+printf(%c,Aa;printf(tt;/*print*/void print1(/*输出剩余串*/int j;for(j=0;j 输出对齐符 */ printf( ;for(j=b;j=l;j+printf(%c,Bj;printf(ttt;/*print1*/void main(int m,n,k=0,flag=0,finish=0;char ch,x;t
5、ype cha;/*用来接受Cmn*/*把文法产生式赋值结构体*/e.origin=E;strcpy(e.array,TG;e.length=2;t.origin=T;strcpy(t.array,FS;t.length=2;g.origin=G;strcpy(g.array,+TG;g.length=3;g1.origin=G;g1.array0=;g1.length=1;s.origin=S;strcpy(s.array,*FS;s.length=3;s1.origin=S;s1.array0=;s1.length=1;f.origin=F;strcpy(f.array,(E;f.leng
6、th=3;f1.origin=F;f1.array0=i;f1.length=1;for(m=0;m=4;m+/*初始化分析表*/for(n=0;n=5;n+Cmn.origin=N;/*全部赋为空*/*填充分析表*/C00=e;C03=e;C11=g;C14=g1;C15=g1;C20=t;C23=t;C31=s1;C32=s;C34=C35=s1;C40=f1;C43=f;printf(提示:本程序只能对由i,+,*,(,构成的以#结束的字符串进行分析,n;printf(请输入要分析的字符串:;do/*读入分析串*/scanf(%c,&ch;if (ch!=i &(ch!=+ &(ch!=
7、*&(ch!=(&(ch!=&(ch!=#printf(输入串中有非法字符n;exit(1;Bj=ch;j+;while(ch!=#;l=j;/*分析串长度*/ch=B0;/*当前分析字符*/Atop=#; A+top=E;/*#,E进栈*/printf(步骤tt分析栈 tt剩余字符 tt所用产生式 n;dox=Atop-;/*x为当前栈顶字符*/printf(%d,k+;printf(tt;for(j=0;j=5;j+/*判断是否为终结符*/if(x=v1j flag=1;break;if(flag=1/*如果是终结符*/if(x=#finish=1;/*结束标记*/printf(acc!n
8、;/*接受 */getchar(;getchar(;exit(1;/*if*/if(x=chprint(;print1(;printf(%c匹配n,ch;ch=B+b;/*下一个输入字符*/flag=0;/*恢复标记*/*if*/else/*出错处理*/print(;print1(;printf(%c出错n,ch;/*输出出错终结符*/exit(1;/*else*/*if*/else/*非终结符处理*/for(j=0;j=4;j+if(x=v2jm=j;/*行号*/break;for(j=0;j,cha.origin;/*输出产生式*/for(j=0;j printf(%c,cha.array
9、j;printf(n;for(j=(cha.length-1;j=0;j-/*产生式逆序入栈*/A+top=cha.arrayj;if(Atop=/*为空则不进栈*/top-;/*if*/else/*出错处理*/print(;print1(;printf(%c出错n,x;/*输出出错非终结符*/exit(1;/*else*/*else*/while(finish=0;/*main*/程序的运行结果如下:四. 实验心得经过这个实验的练习,通过对程序的分析,让我进一步了解LL(1)算法的思想以及它的进一步程序实现,让我对它的了解从简单的理论上升到程序实现的级别,有理论上升到实际,让我更清楚它的用途。五. 实验体会及思考在对实验的分析的时候,也遇到很
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广告合规审查员岗前全能考核试卷含答案
- 心梗患者康复护理指导
- 智能楼宇管理员成果测试考核试卷含答案
- 起重机械装配调试工创新方法强化考核试卷含答案
- 制浆备料工道德测试考核试卷含答案
- 房缺微创封堵术麻醉管理
- 康复护理学原理与实践第四版
- 荷斯坦奶牛异常行为与产奶性能及生理指标的内在关联剖析
- 药乌檀化学成分的深度剖析与研究
- 荣乌高速八段路面工程项目质量管理:问题剖析与优化策略
- 《西方文明之源》课件
- 驾照体检表完整版本
- 内分泌科慢性肾上腺皮质功能减退症诊疗规范2023版
- 600吨-年新材料项目环评报告书
- 加密流量检测与分析
- 企业隶属关系证明书1
- 收割小麦协议书
- DB13T 5657-2023 地理标志产品 平泉滑子菇
- 钢铁公司设备管理制度
- 光电检测技术课件(第三章)
- GB/T 31266-2014过磷酸钙中三氯乙醛含量的测定
评论
0/150
提交评论