合工大编译原理课程设计LR.doc

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编 译 原 理 课程设计 设计题目:LR(1)分析表自动构造程序的实现 学 院:计算机与信息学院 专业班级:计算机科学与技术10-4班 学生姓名:作者(brother_qiang@163.com) 学生学号: 指导教师:李宏芒 设计地点:逸夫科教楼507室 完成日期:2012年12月21日 合肥工业大学 课程设计目的 《编译原理》是计算机专业的一门重要的专业课程,其中包含大量软件设计思想。大家通过课程设计,实现一些重要的算法,或设计一个完整的编译程序模型,能够进一步加深理解和掌握所学知识,对提高自己的软件设计水平具有十分重要的意义。 课程设计内容与要求 40.题目: LR(1)分析表自动构造程序的实现 设计内容及要求:对任意给定的文法G构造LR(1)项目集规范族(按教材P.115所述方法构造,要求实现CLOSURE(I)、GO(I,X)、FIRST(集合FIRST的构造方法参见教材P.78);然后实现LR(1)分析表构造算法。以教材P.115例5.13为输入,构造并输出其LR(1)分析表5.5。 课程设计理论基础 (一)项目集I 的闭包CLOSURE(I)构造方法: 1. I的任何项目都属于CLOSURE(I)。 2. 若项目[A→(·B(, a]属于CLOSURE(I),B→( 是一个产生式,那么,对于FIRST((a) 中的每个终结符b,如果[B→·(, b]原来不在CLOSURE(I)中,则把它加进去。 3. 重复执行步骤2,直至CLOSURE(I)不再增大为止。 (二)令I是一个项目集,X是一个文法符号,函数GO(I,X)定义为: GO(I,X)=CLOSURE(J) 其中 J={任何形如[A→(X·(, a]的项目 | [A→(·X(, a](I} (三)构造FIRST(() 对每一文法符号X(VT∪VN构造FIRST(X) 连续使用下面的规则,直至每个集合FIRST不再增大为止: 1. 若X(VT,则FIRST(X)={X}。 2. 若X(VN,且有产生式X→a…,则把a加入到FIRST(X)中;若X→(也是一条产生式,则把(也加到FIRST(X)中。 3. 若X→Y…是一个产生式且Y(VN,则把FIRST(Y)中的所有非(-元素都加到FIRST(X)中; 若X→Y1Y2…Yk是一个产生式,Y1,…,Yi-1都是非终结符,而且,对于任何j,1(j(i-1,FIRST(Yj)都含有((即Y1…Yi-1(), 则把FIRST(Yi)中的所有非(-元素都加到FIRST(X)中;特别是,若所有的FIRST(Yj)均含有(,j=1,2,…,k,则把(加到FIRST(X)中。 对文法G的任何符号串(=X1X2…Xn构造集合FIRST(()。 1. 置FIRST(()=FIRST(X1)\{(}; 2. 若对任何1(j(i-1,((FIRST(Xj),则把FIRST(Xi)\{(}加至FIRST(()中;特别是,若所有的FIRST(Xj)均含有(,1(j(n,则把(也加至FIRST(()中。显然,若(=(则FIRST(()={(}。 (四)文法G(的LR(1)项目集族C的构造算法: BEGIN C:={CLOSURE({[S(→·S,#]})}; REPEAT FOR C中每个项目集I和G(的每个符号X DO IF GO(I,X)非空且不属于C,THEN 把GO(I,X)加入C中 UNTIL C不再增大 END (五)构造LR(1)分析表的算法: 令每个Ik的下标k为分析表的状态,令含有[S(→·S, #]的Ik的k为分析器的初态。 (六)动作ACTION和状态转换GOTO构造如下: 1. 若项目[A→(·a(, b]属于Ik且GO(Ik, a)=Ij, a为终结符,则置ACTION[k, a]为 “sj”。 2. 若项目[A→(·,a]属于Ik,则置ACTION[k, a]为 “rj”;其中假定A→(为文法G(的第j个产生式。 3. 若项目[S(→S·, #]属于Ik,则置ACTION[k, #]为 “acc”。 4. 若GO(Ik,A)=Ij,则置GOTO[k, A]=j。 5. 分析表中凡不能用规则1至4填入信息的空

文档评论(0)

beifanglei + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档