- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验7-8预测分析表方法
PAGE
PAGE 4
实验7-8 预测分析表方法
一、实验目的
理解预测分析表方法的实现原理。
二、实验内容:
编写一通用的预测法分析程序,要求有一定的错误处理能力,出错后能够使程序继续运行下去,直到分析过程结束。可通过不同的文法(通过数据表现)进行测试。
二、实验内容提示
1.算法数据构造:
构造终结符数组:char Vt[10][5]={“id”,”+”……};
构造非终结符数组:char Vn[10]={ };
构造follow集数组:char *follow[10][10]={ } (可将follow集与预测分析表合并存放)
数据构造示例(使用的预测分析表构造方法1):
/*data1.h简单算术表达式数据*/
char VN[10][5]={E,E,T,T,F}; //非终结符表
int length_vn=5; //非终结符的个数
char VT[15][5]={id,+,*,(,),#}; //终结符表
int length_vt=6; //终结符的个数
char Fa[15][10]={TE,+TE,,FT,*FT,,(E),id};
//产生式表:0:E-TE 1:E-+TE 2:E-空
// 3:T-FT 4:T-*FT 5:T-空 6:F-(E) 7:F-id
int analysis_table[10][11]={0,-1,-1,0,-2,-2,0,0,0,0,0,
-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,5, 5,0,0,0,0,0,
7,-2,-2,6,-2,-2,0,0,0,0,0};
//预测分析表,-1表示出错,-2表示该行终结符的follow集合,用于错误处理,正数表示产生式在数组Fa中的编号,0表示多余的列。
预测分析表的构造方法1
给文法的正规式编号:存放在字符数组中,从0开始编号,正规式的编号即为该正规式在数组中对应的下标。如上述Fa数组表示存储产生式。
构造正规式数组:char P[10][10]={“E-TE’”,”E’-+TE’”,……..}; (正规式可只存储右半部分,如E-TE’可存储为TE’ ,正规式中的符号可替换,如可将E’改为M )
构造预测分析表:int analyze_table[10][10]={ } //数组元素值存放正规式的编号,-1表示出错
(2)预测分析表的构造方法2
可使用三维数组
Char analyze_table[10][10][10]={ }
或
Char *analyze_table[10][10]={ }
2.针对预测分析表构造方法1的查预测分析表的方法提示:
查非终结符表得到非终结符的序号no1
查终结符表得到终结符的序号no2
根据no1和no2查预测分析表得到对应正规式的序号no3=analyze_table[no1][no2] ,如果no3=-1 表示出错。
根据no3查找对应的正规式Fa[no3]
对正规式进行处理
3.错误处理机制
紧急方式的错误恢复方法(抛弃某些符号,继续向下分析)
(1)栈顶为非终结符A,串中当前单词属于FOLLOW(A),则从栈中弹出A(此时可认为输入串中缺少A表示的结构),继续分析。 错误编号为1
(2)栈顶为非终结符A,串中当前单词不属于FOLLOW(A),则可使串指针下移一个位置(认为输入串中当前单词多余),继续分析。错误编号为2
(3)栈顶为终结符,且不等于串中当前单词,则从栈中弹出此终结符(认为输入串中缺少当前单词)或者将串指针下移一个位置(认为串中当前单词多余)。在程序中可选择上述两种 观点中的一种进行处理。错误编号3
因此error()函数的编写方式可按如下方式处理
Error(int errornum)
{
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(M[x,a]=“x→y1y2…yk”)
{
按逆序依次把yk、yk?1、…、y1压入栈中;
输出
您可能关注的文档
- 宜家效应对旅游体验项目设计的启示-李庆雷肖洪磊.doc
- 宜居景观设计探索以杭州临安“春天”居住小区为例.doc
- 宜宾市第二中医院外二科腰痛病腰椎间盘突出症中医诊疗方案.doc
- 宜昌市建设工程质量检测取样员授权表.doc
- 宜昌海汇码头桩基方案2014121.doc
- 宜昌市房屋建筑工程造价指标分析表讨论.doc
- 宜川项目定稿.doc
- 宝塔区川口中学2013年工作汇报.doc
- 宝冶煤气鼓风机方案.doc
- 宝利通Polycom视频应急通讯解决方案.doc
- 2025年安徽工贸职业技术学院单招(语文)测试题库及完整答案1套.docx
- 2025年云南省西畴县第二中学高三一轮复习基础知识检测试题生物试题含解析.doc
- 沈阳城市建设学院《中国古代思想史》2023-2024学年第一学期期末试卷.doc
- 郴州职业技术学院《中西医结合肿瘤学》2023-2024学年第一学期期末试卷.doc
- 安徽大学江淮学院《计算机组成与体系结构实验》2021-2022学年第一学期期末试卷.doc
- 江西省南昌市进贤二中2025年高三5月阶段性模块监测生物试题含解析.doc
- 雅安职业技术学院《合唱与指挥一》2023-2024学年第一学期期末试卷.doc
- 云南省禄丰县一中2024-2025学年高三4月联考语文试题(详细答案版)含解析.doc
- 武汉体育学院体育科技学院《中国文学经典(下)》2023-2024学年第一学期期末试卷.doc
- 阜阳市重点中学2025年高三下学期适应性月考卷(三)生物试题含解析.doc
文档评论(0)