电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

编译原理试验自动生成LR0分析表VIP免费

编译原理试验自动生成LR0分析表_第1页
1/17
编译原理试验自动生成LR0分析表_第2页
2/17
编译原理试验自动生成LR0分析表_第3页
3/17
2016.12.14自动生成LR(0)分析表.word可编辑..专业.专注.目录一、实验名称.....................................2二、实验目的.....................................2三、实验原理.....................................21、闭包closure(I).............................22、转换函数GO(I,X)............................23、ACTION子表和GOTO子表的构造................3四、实验思路.....................................31、输入........................................32、建立项目....................................33、closure算法................................44、转向函数GO(I,X)的算法......................45、建立状态及对应的项目集......................46、ACTION子表的构造...........................47、GOTO子表的构造.............................5五、实验小结.....................................5六、附件.........................................51、源代码......................................52、运行结果截图...............................15.word可编辑..专业.专注.一、实验名称自动生成LR(0)分析表二、实验目的1、实现计算闭包函数CLOSURE的算法。2、实现转向函数GO(I,X)的算法。3、实现ACTION子表和GOTO子表的构造算法。4、输入任意的压缩了的上下文无关文法,输出相应的LR(0)分析表(以表格形式输出)。三、实验原理1、闭包closure(I)若文法G已拓广为G’,而S为文法G的开始符号,拓广后增加产生式S’->S。如果I是文法G’的一个项目集,定义和构造I的闭包closure(I)如下:a.I的项目在closure(I)中。b.若A->α?Bβ属于closure(I),则每一形如B->?γ的项目也属于closure(I)。c.重复b直到不出现新的项目为止。即closure(I)不再扩大。2、转换函数GO(I,X)GO(I,X)=closure(J)其中:I为包含某一项目集的状态。X为一文法符号,X∈Vn∪Vt.word可编辑..专业.专注.J={任何形如A->α?Xβ的项目|A->αX?β属于I}3、ACTION子表和GOTO子表的构造a.若项目A→α.aβ属于Ik且GO(Ik,a)=Ij,a为终结符,则置ACTION[k,a]为“把状态j和符号a移进栈”,简记为“sj”;b.若项目A→α.属于Ik,那么,对任何终结符a,置ACTION[k,a]为“用产生式A→α进行规约”,简记为“rj”;其中,假定A→α为文法G'的第j个产生式c.若项目S'→S.属于Ik,则置ACTION[k,#]为“接受”,简记为“acc”;d.若GO(Ik,A)=Ij,A为非终结符,则置GOTO[k,A]=j;e.分析表中凡不能用上述1至4填入信息的空白格均置上“出错标志”。按上述算法构造的含有ACTION和GOTO两部分的分析表,如果每个入口不含多重定义,则称它为文法G的一张LR(0)分析表。具有LR(0)表的文法G称为一个LR(0)文法,LR(0)文法是无二义的。四、实验思路本次实验采用python完成。1、输入构造一个LR类,输入非终结符,终结符,开始符以及产生式分别存于LR类的成员:Vn,Vt,start,production。2、建立项目构造函数Project,根据产生式建立项目,对每一条产生式的右部进行处理,依次在右部的每个终结符和非终结符前添加原点,并在最后添加原点。.word可编辑..专业.专注.3、closure算法构造函数closure,求一个项目的闭包closure。分三种情况讨论,对于S->·和E->·a这两种情况,返回自身。对于E->b·B这种情况,对项目的右部进行处理,继续求B->·r闭包,因此这是一个递归函数。最终函数以列表的形式返回每个项目集。4、转向函数GO(I,X)的算法构造函数GO,求一个项目集的GO(I,X)。建立字典go存放最终结果,对不是S->a·形式的项目进行讨论,对项目的右部进行处理,将原点后移一位,利用closure函数得到圆点后移得到的项目的项目集,加入go中。直到处理完该项目集的所有项目。5、建立状态及对应的项目集构造函数createDFA,建立状态及对应的项目集。首先,从拓广文法的第一个项目开始,建立初态,定义number存放状态编号,初始值为0。设立字典status存放状态编号及对应的项目集。将初态加入一个队列qu中。每次从qu中取出一个状态,求该状态的项目集的Go(I,x),再对得到的项目集进行判断,若该项目集是已知的状...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

编译原理试验自动生成LR0分析表

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部