编译原理课程设计SLR1文法与算符优先文法程序实现.doc

编译原理课程设计SLR1文法与算符优先文法程序实现.doc

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
学院 课 程 设 计 任 务 书 题目 SLR(1)文法与算符优先文法程序实现 专业、班级 学号 姓名 主要内容 构造SLR(1)分析表,并用程序实现 S->Sb|bAa A->aSc|aSb|a 算符优先文法处理算术表达式 基本要求 构造SLR(1)分析表,并用程序实现,测试某表达式是否该文法的句子。 根据算符优先分析法并用程序实现,将表达式进行语法分析,判断一个表达式是否正确。 主要参考资料: [1] 吕映芝,张素琴等.编译原理.清华大学出版社,1998 [2] 胡伦俊,徐兰芳,骆婷. 编译原理(第2版).电子工业出版社,2002 [3] 严蔚敏,吴伟民. 数据结构(C语言版). 清华大学出版社,1997 完 成 期 限: 一周 指导教师签名: 课程负责人签名: 2011年 6 月 24日 本科 编译原理课程设计总结报告 设计题目:SLR(1)文法与算符优先文法程序实现 学生姓名: 系 别: 专 业:计算机科学与技术 班 级:08级2班 学 号: 指导教师: 2011年6月24日 目 录 一、设计题目 1 二、运行环境 1 三、算法设计思想 1 1、LR算法思想 1 2、算符优先算法思想 2 四、算法流程图 3 1、SLR(1)流程图 3 2、算符优先流程图 4 五、算法设计分析 5 1、SLR(1)分析设计 5 2、算符优先文法分析与设计 7 六、运行结果分析 8 1、SLR(1)运行结果 8 2、算符优先运行结果 8 七、收获及体会 10 附 录:程序清单 11 设计题目 SLR(1)文法与算符优先文法程序实现 二、运行环境 操作系统:Microsoft Windows XP 可视化环境:Microsoft Visual C++6.0 算法设计思想 LR算法思想 LR分析方法在规范规约的过程中,一方面记住已移进和规约出的整个符号串,即记住“历史”,另一方面根据所用的产生式推测未来可能碰到的输入符号,即对未来进行“展望”。当一串貌似句柄的符号串呈现于分析栈的顶端时,我们希望能够根据记载的“历史”和“展望”以及“现实”的输入符号等三个方面的材料,来确定栈顶的符号串是否构成相对某一产生式的句柄。 LR分析器实质上是一个带先进后出存储器(栈)的确定有限状态自动机,每一步工作是由栈顶状态和现行输入符号所唯一决定的。 LR分析器的核心部分是一张分析表。这张分析表包括两个部分,一是“动作”(ACTION)表,另一是“状态转换”(GOTO)表。他们都是二维数组。ACTION(s,a)规定了当状态s面临输入符号a时应采取什么动作。GOTO(s,X)规定了状态s面对文法符号X(终结符或非终结符)时下一状态是什么。显然,GOTO(s,X)定义了一个以文法符号为字母表的DFA。 每项ACTION(s,a)所规定的动作不外是下述四种可能之一: (1)移进 :把(s,a)的下一个状态s’= GOTO(s,X)和输入符号a推进栈,下一输入符号变成现行输入符号。 (2)规约 :指用某一产生式A→β 进行规约。假若β的长度为r,规约的动作是A,去除栈顶的r个项,使状态Sm-r 变成栈顶状态,然后把(Sm-r,A)的下一状态s’= GOTO(Sm-r,A)和文法符号A推进栈。规约动作不改变现行输入符号。执行规约动作意味着β(=Xm-r+1…Xm)已呈现于栈顶而且是一个相对于A的句柄。 (3)接受 :宣布分析成功,停止分析器的工作。 (4)报错 :发现源程序含有错误,调用出错处理程序。 算符优先算法思想 算符优先分析方法是根据算符之间的优先关系而设计的一种自下而上的分析方法。算符优先分析的基本思想是只规定算符之间的优先关系,也就是只考虑终结符之间的优先关系。算符优先分析过程是自下而上的归约过程,所谓的算符优先分析就是定义算符之间(确切地说,终结符之间)的某种优先关系,借助于这种优先关系寻找“可归约串”和进行归约。 该文法必须满足以下条件:文法它的任一产生式的右部都不含两个相继(并列)的非终结符,即不含如下产生式右部:…QR…; 首先求出该文法的优先关系表,在程序中用2维数组表示,-1表示小于或者等于,大于为1,其它为0表示错误。 在输入一串字符串以后进行按照文法一步一步的进行规约,我所进行的是直接规约到文法的符号而不是规约到N。 数据结构使用的是链表,用一个STRUCT来表示一个元

文档评论(0)

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

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

1亿VIP精品文档

相关文档