LL(1)语法分析构造表的设计 正文(6)

2019-04-15 14:45

安徽工程大学课程设计(论文)

① N γ[k]∈VN? γ[k]∈FOLLOW(X) FIRST(γ[k])-{ε}∈FOLLOW(γ[i]) 结束 γ[k]?*ε Y N k++ xk+1xk+2?xn?*ε FOLLOW(X)∈FOLLOW(Xk)

第 26 页

安徽工程大学课程设计(论文)

6、部分代码: void FOLLOW(int i) {

int j,k,m,n,result=1; char c,temp[20];

c=non_ter[i]; /*c为待求的非终结符*/ temp[0]=c; temp[1]='\\0';

merge(fo,temp,1); if(c==start)

{ /*若为开始符号*/ temp[0]='#'; temp[1]='\\0'; merge(follow[i],temp,1); }

for(j=0;j<=count-1;j++) { if(in(c,right[j])==1) /*找一个右部含有c的产生式*/ { for(k=0;;k++) if(right[j][k]==c) break; /*k为c在该产生式右部的序号*/ for(m=0;;m++) if(v[m]==left[j]) break; /*m为产生式左部非终结符在所有符号中的序号*/ if(k==strlen(right[j])-1) { /*如果c在产生式右部的最后*/ if(in(v[m],fo)==1) { merge(follow[i],follow[m],1); continue; } if(F[m]=='0') { FOLLOW(m); F[m]='1'; } merge(follow[i],follow[m],1); } else { /*如果c不在产生式右部的最后*/ for(n=k+1;n<=strlen(right[j])-1;n++) {

第 27 页

安徽工程大学课程设计(论文)

empt[0]='\\0'; result*=_emp(right[j][n]); } if(result==1) { /*如果右部c后面的符号串能推出^*/ if(in(v[m],fo)==1) { /*避免循环递归*/ merge(follow[i],follow[m],1); continue; } if(F[m]=='0') { FOLLOW(m); F[m]='1'; } merge(follow[i],follow[m],1); } for(n=k+1;n<=strlen(right[j])-1;n++) temp[n-k-1]=right[j][n]; temp[strlen(right[j])-k-1]='\\0'; FIRST(-1,temp); merge(follow[i],TEMP,2); } } }

F[i]='1'; }

第 28 页

安徽工程大学课程设计(论文)

第5章 运行与测试结果

5.1测试数据 E?E+T|E=T T?T*F}T/F|F F?(E)|i

5.2界面实现情况

第 29 页

安徽工程大学课程设计(论文)

第6章 结论课程设计心得

收获:通过本次课程设计,我收获了很多东西。首先对编译原理这门课有了进一步的深刻理解,对FOLLOW集的定义和算法有看很深的认识,同时对LL(1)文法分析的原理和过程有了进一步的巩固,也锻炼了我编程的能力,巩固了平时所学的知识,真正做到了学以致用。

体会:在做课程设计的过程中,发现自己在编写程序过程中,总是会忽略各种细节,从而导致经常修改一些很小的低级错误才能使程序正常运行,不仅浪费时间,还影响对其他地方的修改,深刻体会到了自己在编程方面与别人的差距,在今后的学习中,我会注意改正自己在这方面的缺点,促使自己的编程水平不短进步。

编译原理是一门专业学科,对于现阶段的我来说,只能掌握它的一些基本原理和概念,对于一些更深层的知识还是有很多难以理解的地方。但在这次课程设计过程中,是我对编译原理有了更深的理解,同时也锻炼了自己的思考能力,提高了自己的团体合作意识,锻炼了自己的动手编程能力,对于将知识的转化有了很大的帮助。总之,在这次课程设计过程中,我学到了很多东西,在很多方面都得到了提高。

第 30 页


LL(1)语法分析构造表的设计 正文(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:英语四级大纲词汇 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: