- 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)文法,在写代码的过程中也加深了我对栈的理解,,老师课上已经讲解了许多,而且实验时也指导了我们一些该注意的地方,中间还是有一些小问题但是,在判断输入串是否匹配的时候,还是有些问题,不过总体目标还是完成了,当然问题最多的还是栈顶元素与剩余字符串的移进匹配过程,这一点我老是搞不太清楚。不过在同学的帮助和指导下
您可能关注的文档
- 腹部手术并发症护理剖析.ppt
- 腾讯企业发展战略剖析.docx
- 腾讯公司绩效管理制度.剖析.doc
- 腾讯编码规范剖析.doc
- 建筑识图与构造-培训课件5分解.ppt
- 腹腔镜技术剖析.ppt
- 腾讯战略分析剖析.ppt
- 膀胱全切术后护理剖析.ppt
- 腹部讲义-CT学习剖析剖析.ppt
- 腹腔镜暖巢囊肿手术配合剖析.ppt
- 220kV变电站主变压器泡沫喷淋灭火系统防误动控制方案研究.docx
- 2024消防水泵房施工方案.docx
- 密闭电石炉净化系操作说明--课件.ppt
- 小儿大动脉炎的科普知识.pptx
- 【备战25年高考数学】题型06 7类三角函数与三角恒等变换解题技巧(原卷版).docx
- 【备战25年高考数学】题型06 7类三角函数与三角恒等变换解题技巧(原卷版) (2).docx
- 2011年高考数学试卷(理)(天津)(空白卷).docx
- 【备战25年高考数学】题型08 10类球体的外接球及内切球解题技巧(解析版).docx
- 【备战25年高考数学】题型09 6类圆锥曲线离心率解题技巧(解析版).docx
- 【备战25年高考数学】题型08 10类球体的外接球及内切球解题技巧(原卷版).docx
文档评论(0)