- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)