自动生成lr0分析表

自动生成lr0分析表

ID:35452182

大小:73.82 KB

页数:5页

时间:2019-03-24

自动生成lr0分析表_第1页
自动生成lr0分析表_第2页
自动生成lr0分析表_第3页
自动生成lr0分析表_第4页
自动生成lr0分析表_第5页
资源描述:

《自动生成lr0分析表》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、编译原理实验报告实验名称自动生成LR(0)分析表实验时间2011年6月13日院系计算机科学与技术班级08计算机科技一班学号E10814065姓名王全鸿1.试验目的输入:任意的压缩了的上下文无关文法。输出:相应的LR(0)分析表。2.实验原理在LR分析工作过程中的任何时候,栈里的文法符号(自栈底而上)XlX2-Xm应该构成活前缀,把输入串的剩余部分配上之后即应成为规范句型(如果整个输入串确实构成一个句子)。因此,只要输入串的已扫描部分保持可归约成一个活前缀,那就意味着所扫描过的部分没有错误。构造识别文法活前缀DFA有3种方法:(1)根据形式定义求出活前

2、缀的正则表达式,然后由此正则表达式构造NFA再确定为DFA;(2)求出文法的所有项目,按一定规则构造识别活前缀的NFA再确定化为DFA;(3)使用闭包函数(CLOSURE)和转向函数(GO(I,X))构造文法G,的LR(0)的项目集规范族,再由转换函数建立状态之间的连接关系来得到识别活前缀的DFAo对于LR(0)文法,我们可以直接从它的项目集规范族C和活前缀识别自动机的状态转换函数GO构造出LR分析表。下面是构造LR(0)分析表的算法。假定8{10,11,...,In},令每个项目集Ik的下标k为分析器的一个状态,因此,G的LR(O)分析表含有状态0

3、,1,no令那个含有项目S'-.S的Ik的下标k为初态。ACTION子表和GOTO子表可按如下方法构造:(1)若项目Afd.aP属于Ik且GO(Ik,a)=Ij,a为终结符,则置ACTION[k,a]为“把状态j和符号a移进栈”,简记为“sj”;(2)若项目A-O.属于Ik,那么,对任何终结符a,置ACTION[k,a]为“用产生式A-O进行规约”,简记为“『;其中,假定AfQ为文法6的第j个产生式;(3)若项目S—S.属于Ik,则置ACTION[kz#]为“接受”,简记为“acc”;(4)若GO(Ik,A)=lj,A为非终结符,则置GOTOIk,A

4、]=j;(5)分析表中凡不能用上述1至4填入信息的空白格均置上“出错标志”。按上述算法构造的含有ACTION和GOTO两部分的分析表,如果每个入口不含多重定义,则称它为文法G的一张LR(O)分析表。具有LR(O)表的文法G称为一个LR(0)文法,LR(O)文法是无二义的。3.实验内容(1)实现计算闭包Closure(I)的算法;⑵实现转向函数Go(q,a)的算法;⑶构造文法项目集函数CreateProjectSet();定义数据结构:intstacksize;JSqStack;structgrammer{charvn[27];chars;intlin

5、e;};typedefstructprjsetchar**g;charvt[127];intid;//项目集编号,从10000开始,与项目编号(从0开始)区别structprjset*next;//指向下个项目集charprjt[PROJECT_SET_SIZE+l];//PROJECT_SET_SIZE个单元,存储项目的编号,prjt[O]项目编号的个数charpointafter[PROJECT_SET_SIZE+l];//圆点后的字符,pointafter[0]字符个数structprjset*actorgo[PROJECT_SET_SIZE]

6、;charpointbefore;Jprjset/pprjset;4•实验心得通过这次实验我对LR(0)语法分析有了一个更熟悉的掌握,对预先定义的文法规则,并集成词法分析、符号表管理等程序来生成LR(0)分析表有了清醒的认识,并且对高级程序语言一般结构和主要共同特征有了全面的认识和理解.5•实验代码voidCreateProjectSet(){//构造文法的项目集inti;intj;intk;intid=ID;pprjsetp,q;root」=root.tail=NULL;if((p=(pprjset)malloc(sizeof(prjset)))=

7、=NULL)exit(l);p->id=id;p->next=NULL;p->prjt[O]=0;p->pointafter[0]=0;p->pointbefore='';for(j=0;jactorgo[j]=NULL;for(j=0;jactorgo[j]=NULL;root.I=p;root.tail=p;root.size=1;for(i=0;i

8、RAMMER_START_CHAR_POS]&&DOT==project.gp[i][GRAMMER_STA

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

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

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