- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
自上而下语法分析
实验目的:
1.根据某一文法编制调试递归下降分析程序,以便对任意输入的符号串进行分析。(选做)
2.根据某一文法编制调试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
输入一以#结束的符号串(包括+—*/()i#):
输出结果:包括分析栈、数组中的剩余字符串以及所用的产生式,形如:
分析栈 剩余输入串 所用产生式 E i+i*i# E-TG
其中有如下两点要求:
1.表达式中允许使用运算符(+-*/)、分割符(括号)、字符I,结束符#;
2.如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好);
(二)LL(1)分析法实验设计思想及算法
三、程序设计的过程以及关键函数的功能
(一)模块结构:
1、定义部分:定义常量、变量、数据结构。
2、初始化:设立LL(1)分析表、初始化变量空间(包括堆栈、结构体等);
3、运行程序:让程序分析一个text文件,判断输入的字符串是否符合文法定义的规则;
4、利用LL(1)分析算法进行表达式处理:根据LL(1)分析表对表达式符号串进行堆栈(或其他)操作,输出分析结果,如果遇到错误则显示简单的错误提示。
(二)程序的整体流程及关键函数解析:
1、定义一个栈,用于存放非终结符
将终结符和非终结符各存放在一个数组中,用于判断栈顶元素是否是终结符或非终结符,然后根据情况判断接下来是查表,还是进行匹配移进。
定义一个全局变量f,用于指示从文件中读出的匹配后的剩余字符串中的首个字符在数组中的位置。当输出栈时,同时输出剩余字符串。
4、对于chaxun( )函数,X在 v2[5]中的位置相当于表的行位置,sym在v1[6]中的位置,相当于表的列位置。根据查表操作可以判断(X,sym)对于的表中是否有产生式。
bool chaxun(char X,char sym){
int m=feizhongjie(X );
int n=iszhongjie(sym);
char str[10];
strcpy(str,table[m][n]);
if (strlen(str)==0)
{ return false;}
else
{if (str[0]!=^)
{
for (int i=strlen(str)-1;i=0;i--)
push(str[i]);
}
print();
cout\tv2[m]--strendl;
return true;}
}
读文件,并将文件里的内容读入数组b[ ]中。
6、根据表中的产生式,对栈顶元素根据情况进行移进匹配操作,知道剩余表达式中无非终结符为止,即匹配成功。否则,则匹配失败,给出的字符表达式无法由给定的文法推出。
while (flag!cuo)
{
X=pop();//把符号栈的式子付给x
if (X==#)
{
if(sym==X)
{
cout输入的是合法符号串endl;
flag=false;
}
else
cout非法的符号串endl;
}
else if(iszhongjie(X)!=-1) { //如果是终结符跳到if
if(X==sym)
{
f++;
sym=fgetc(fp);
}
else
printf(错误);}
else
if(!chaxun(X,sym)) cuo=true;
}
四、运行结果:
输入文件内容:i+i*i
若输入i++i*i,显示如下:
若输入i*(i+i),显示如下:
五、实验总结
通过本次实验,我初步掌握了ll(1)文法,在写代码的过程中也加深了我对栈的理解,,老师课上已经讲解了许多,而且实验时也指导了我们一些该注意的地方,中间还是有一些小问题但是,在判断输入串是否匹配的时候,还是有些问题,不过总体目标还是完成了,当然问题最多的还是栈顶元素与剩余字符串的移进匹配过程,这一点我老是搞不太清楚。不过在同学的帮助和指导下
您可能关注的文档
- 最新行政区划一览表探讨.doc
- 智能环境参数检测仪探讨.doc
- 智能化项目设计费的计算方法(附计算实例)探讨.doc
- 智能化弱电集成系统施工组织设计方案(正式版)探讨.doc
- 智能电网与解决方案探讨.doc
- 智能电磁流量计使用说明书探讨.doc
- 智能程控直流屏使用说明书探讨.doc
- 物业管理应急探讨.doc
- 一种下料管壁抗冲击耐磨层改进方法的应用与推广探讨.doc
- 最新汉川顺安考场路考2016年7月2016.07.27探讨.doc
- 白天晚上教学课件.ppt
- 2025年山东菏泽市牡丹区中医医院引进急需紧缺专业技术人才30人笔试模拟试题参考答案详解.docx
- 2025年山东菏泽市牡丹区中医医院引进急需紧缺专业技术人才30人笔试模拟试题带答案详解.docx
- 2025年山东菏泽市牡丹区中医医院引进急需紧缺专业技术人才30人笔试模拟试题及参考答案详解.docx
- 2025年山东菏泽市牡丹区中医医院引进急需紧缺专业技术人才30人笔试模拟试题及参考答案详解一套.docx
- 2025年山东菏泽市牡丹区中医医院引进急需紧缺专业技术人才30人笔试模拟试题及完整答案详解1套.docx
- 2025年山东菏泽市牡丹区中医医院引进急需紧缺专业技术人才30人笔试模拟试题及参考答案详解1套.docx
- 2025年山东菏泽市事业单位招聘急需紧缺岗位目录(第一批)笔试模拟试题参考答案详解.docx
- 2025年山东菏泽市牡丹区中医医院引进急需紧缺专业技术人才30人笔试模拟试题及答案详解1套.docx
- 画西瓜教学课件.ppt
最近下载
- 单层钢结构厂房施工组织设计-.doc VIP
- 未来可期,不负高三——高三启动仪式高三第一课-2024-2025学年高中主题班会(共29张ppt).pptx VIP
- T∕CHES 32-2019 节水型高校评价标准(可复制版).pdf
- 墙面粉刷施工工艺.docx VIP
- 环氧地坪施工.docx VIP
- 2025广西南宁市交通运输综合行政执法支队招聘编外聘用人员5人备考试题及答案解析.docx VIP
- 青少年航天知识竞赛题库及答案.docx
- 环氧地坪施工工艺流程.docx VIP
- DB 34T 2752-2016 用人单位职业病危害现状评价导则.docx VIP
- 2025年高考全国1卷读后续写讲评课件 -2026届高考英语一轮复习专项.pptx
文档评论(0)