语法分析语法分析实验报告.doc

语法分析语法分析实验报告.doc

ID:55757085

大小:97.98 KB

页数:7页

时间:2020-06-05

语法分析语法分析实验报告.doc_第1页
语法分析语法分析实验报告.doc_第2页
语法分析语法分析实验报告.doc_第3页
语法分析语法分析实验报告.doc_第4页
语法分析语法分析实验报告.doc_第5页
资源描述:

《语法分析语法分析实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、语法分析报告姓名:李思婕学号:912106840301班级:91210658011.程序要求(1)对输入文法,它能判断是否为LL(1)文法,若是,则转(2);否则报错并终止;(2)输入已知文法,由程序自动生成它的LL(1)分析表;(3)对于给定的输入串,应能判断识别该串是否为给定文法的句型。2.程序设计分析该程序可分为如下几步:(1)读入文法(2)判断正误(3)若无误,判断是否为LL(1)文法(4)若是,构造分析表;(5)由总控算法判断输入符号串是否为该文法的句型。有效?读入文法开始3.程序流程图是是LL(1)文法

2、?结束报错判断句型是4.关键部分程序本段截取了处理带有循环左递归产生式的代码。对于带有循环左递归的产生式的处理分为四个步骤:1.创建一个新的非终结符;2.产生一个左部为原产生式左部,右部为将原产生式右部去掉导致左递归的未终结符,再在末尾添加新创建的非终结符作为新产生式的右部;3.产生一个左部为原产生式左部,右部为空的产生式(空集用^表示)4.产生左部为新创建的非终结符,右部为原产生式除含有左递归之外的其他右部;voidrecur(char*point){/*完整的产生式在point[]中*/intj,m=0,n=3

3、,k;chartemp[20],ch;ch=c();/*得到一个非终结符*/k=strlen(non_ter);non_ter[k]=ch;non_ter[k+1]='';for(j=0;j<=strlen(point)-1;j++){if(point[n]==point[0]){/*如果‘

4、’后的首符号和左部相同*/for(j=n+1;j<=strlen(point)-1;j++){while(point[j]!='

5、'&&point[j]!='')temp[m++]=point[j++];left[co

6、unt]=ch;memcpy(right[count],temp,m);right[count][m]=ch;right[count][m+1]='';m=0;count++;if(point[j]=='

7、'){n=j+1;break;}}}else{/*如果‘

8、’后的首符号和左部不同*/left[count]=ch;right[count][0]='^';right[count][1]='';count++;for(j=n;j<=strlen(point)-1;j++){if(point[j]!='

9、')

10、temp[m++]=point[j];else{left[count]=point[0];memcpy(right[count],temp,m);right[count][m]=ch;right[count][m+1]='';printf("count=%d",count);m=0;count++;}}left[count]=point[0];memcpy(right[count],temp,m);right[count][m]=ch;right[count][m+1]='';count++;m=0;}}}

11、5.执行结果(1)输入一个文法(2)输入一个符号串(3)再次输入一个符号串,然后退出程序6.遇到的问题及解决:在课程设计过程中遇到的比较棘手的问题是对于产生式的存储方式问题和对于含有左递归的产生式的处理。关于存储方式的问题,这涉及数据结构的设计问题,最初的设想是采用字符串的方式,直接将每个产生式都当成一个字符串进行处理,后来觉得不太方便,便采用了数组的方式,并且将产生式的左部和右部分别用数组分开存放,同一个产生式的左部和右部具有相同下标,做到了一一对应,这样也便于对含有左递归的产生式的处理。对于含有左递归的产生式的

12、处理,根据对于左递归的传统处理方法,利用新的非终结符,用三个新的产生式代替它,对于简单的含有左递归的产生式都完美解决,但由于时间紧迫,没有使用复杂的产生式进行测试,有待日后完善。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。