版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、预测分析表方法一、实验目的理解预测分析表方法的实现原理。 二、实验内容:编写一通用的预测法分析程序,要求有一定的错误处理能力,出错后能够使程序继续运行下去,直到分析过程结束。可通过不同的文法(通过数据表现)进行测试。三、实验步骤1算法数据构造: 构造终结符数组:char vt105=“id, +”;构造非终结符数组: char vn10=;构造 follow 集数组: char *follow1010= (可将 follow 集与预测分析表合并存放) 数据构造示例(使用的预测分析表构造方法1 ) :/*data1.h 简单算术表达式数据*/char vn105= ?, ?, 呜, 呜?, ?;
2、 / 非终结符表int length_vn=5; / 非终结符的个数终结符表,?, ?;/ 糊 1 char vt155=,?, ?, ? / int终结符白个数 length_vt=6; 糊唇,?呸,?呆?,,??, ??char fa1510=呜?呸,空产生式表:0:e-te 1:e-+te 2:e-6:f-(e) 7:f-id 空/ 3:t-ft 4:t-*ft 5:t-analysis_table1011=0,-1,-1,0,-2,-2,0,0,0,0,0,int-1,1,-1,-1,2,2,0,0,0,0,0,3,-2,-1,3,-2,-2,0,0,0,0,0,-1,5, 4,-1,
3、5, 5,0,0,0,0,0,7,-2,-2,6,-2,-2,0,0,0,0,0;/ 预测分析表,-1 表示出错, -2 表示该行终结符的 follow 集合,用于错误处理,正数表示产生式在数组 fa 中的编号,0 表示多余的列。( 1 ) 预测分析表的构造方法1给文法的正规式编号: 存放在字符数组中, 从 0 开始编号, 正规式的编号即为该正规式在数组中对应的下标。如上述 fa 数组表示存储产生式。构造正规式数组:char p1010= e-te, e-+te,.;(正规式可只存储右半部分,如 e-te 可存储为 te ,正规式中的符号可替换,如可将e 改为 m )构造预测分析表: int
4、analyze_table1010= /数组元素值存放正规式的编号,-1表示出错( 2)预测分析表的构造方法2可使用三维数组analyze_table101010= char或char *analyze_table1010=2.针对预测分析表构造方法1的查预测分析表的方法提示:(1)查非终结符表得到非终结符的序号no1(2)查终结符表得到终结符的序号no2(3) 根据no1和no2查预测分析表得到对应正规式的序号 no3=analyze_tableno1no2,如果 no3=-1表示出错。(4) 根据no3查找对应的正规式 fano3(5) 对正规式进行处理3 .错误处理机制紧急方式的错误恢复
5、方法(抛弃某些符号,继续向下分析)(1)栈顶为非终结符 a,串中当前单词属于follow (a),则从栈中弹出 a (此时可认为输入串中缺少a表示的结构),继续分析。 错误编号为1(2)栈顶为非终结符 a,串中当前单词不属于follow (a),则可使串指针下移一个位置(认为输入串中当前单词多余),继续分析。 错误编号为2(3)栈顶为终结符,且不等于串中当前单词,则从栈中弹出此终结符(认为输入串中缺少当前单词)或者将串指针下移一个位置(认为串中当前单词多余)。在程序中可选择上述两种观点中的一种进行处理。错误编号3因此error ()函数的编写方式可按如下方式处理error (int error
6、num ) if (errornum=1 )else if (errornum=2 )else /或者可用choose case语句处理 4 .增加了错误处理的预测分析程序预测分析程序的算法:将“#”和文法开始符依次压入栈中; 把第一个输入符号读入a;do把栈顶符号弹出并放入x中;if(x vt) if(x = a) 将下一输入符号读入a;else error(3); else if(mx,a = xfy1y2 yk”) 按逆序依次把yk、yk?1、y1压入栈中;输出“x-y1y2 - yk;; e else error2) else if (afollowx ) error(1);afoll
7、ow (x-2表示)在前述的数据定义中查表为/while(x!= #)给定算术表达式文法,编写程序。 测试数据:1.算术表达式文法-+te|- te| 一 ft一*ft |/ ft |%ft| 一 (e) |id|nume- tee t t f给定一符合该文法的句子,如 id+id*id$ ,运行预测分析程序,给出分析过程和每一步的分析结 果。输出形式参考下图($为结束符):#include#include#include# define tt 0char aa20=;int pp=0;# if ttchar vn5=e,e,t,t,f; /非终结符表int length_vn=5;非终结符的
8、个数char vt10=*,t,m,+,-,(,),i,n,#;/ 终结符表l-/m-% i-id n-numint length_vt=10;/终结符的个数char fa126=te,+te,-te,null,ft,*ft,ft,mft,null,(e),i,;/产生式表:0:e-te1:e-+te 2:e-te 3:e-空char f126=e-,e-,e-,e-,t-,-, -, -, -,f-,f-,f-;int analysis_table510=-2,-2,-2,-2,-2,0,-1,0,0,-1,-2,-2,-2,1,2,-2,3,-2,-2,3,-2,-2,-2,-1,-1,4
9、,-1,4,4,-1,5,6,7,8,8,-2,8,-2,-2,8, -1,-1,-1,-1,-1,9,-1,10,11,-1;学资学习网# elsechar vn4=a,z,b,y; /非终结符表int length_vn=4; /非终结符的个数char vt5=a,l,d,b,#;/终结符表终结符的个数length_vt=5; / intchar fa66=az,abl,null,dy ,y,null;char f66=a-,z-,b-,y-;int analysis_table45=0,-2,-1,-2,-1,1,-2,2,-2,2,-2,-1,3,-2,-2,-2,5,-2,4,-2;
10、# endifchar stack50;int top=-1;void initscanner() / 程序初始化:输入并打开源程序文件int i=0;file *fp;if(fp=fopen(a.txt,)=null)printf(open error!);exit(0);char ch=fgetc(fp);while(ch!=eof)aai=ch;i+;ch=fgetc(fp);fclose(fp);void push(char a)top+;stacktop=a;char pop()return stacktop-;int includevt(char x)for(int i=0;ile
11、ngth_vt;i+)if(vti=x) return 1;return 0;int includean(char x,char a)int i,j;for(i=0;ilength_vn;i+)if(vni=x) break;for(j=0;j=0)int h=includean(x,a);轴潼晴茏展开非终结符s%sn,fh,fah);int k;for(k=0;k10;k+)if(fahk=0) break;if(k=4)/printf(+pop %c n,x);elsewhile(k!=0)/按逆序依次把 yk、yk?1、y1压入栈中k-;push(fahk);else if(includean(x,a)=-1)flag=1;轴潼晴茏出错,从栈顶弹出cn,x);x=pop();elseflag=1;轴潼晴茏出错,跳过cn,a);pp+;a=aapp;elseflag=1;轴潼晴茏出错,跳过cn,a);pp+;a=aapp;while(x!=#);if(flagg=0)printf(%cttt%ct
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理部工作计划汇编
- 小学一年级下学期工作计划
- 区2025年度计划生育工作计划2
- 分厂第十六个百日安全无事故活动计划
- 《外科常见急腹症》课件
- 《水暖理论知识培训》课件
- 《氨基酸之亮氨酸》课件
- 合同 第三方费用 报销条款
- 铁路培训合同
- 2025年阿克苏货运从业资格证模拟考试题目
- C语言程序设计-001-国开机考复习资料
- 趣味英语与翻译学习通超星期末考试答案章节答案2024年
- 统编版高中政治必修二经济与社会复习提纲
- 数智时代的商业变革智慧树知到期末考试答案2024年
- 组织架构图可编辑
- 《地形对聚落及交通线路分布的影响》教学设计
- 《中国旅游地理》新课程标准
- seagull船员英语STCW甲板操作级答案
- 脑出血后遗症临床路径
- 事故隐患排查治理统计分析制度
- 重庆大学--数学模型--数学实验作业二(共9页)
评论
0/150
提交评论