网站大量收购独家精品文档,联系QQ:2885784924

(IFELSE条件语句的翻译程序设计LR方法、输出四元式.docVIP

(IFELSE条件语句的翻译程序设计LR方法、输出四元式.doc

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(IFELSE条件语句的翻译程序设计LR方法、输出四元式

目录 1 系统描述(问题域描述) 2 2 文法及属性文法的描述 2 2.1文法 2 2.2 属性文法 2 3 语法分析方法描述及语法分析表设计 3 3.1语法分析方法描述 3 3.1.1 LR方法的基本思想 3 3.1.2 LR分析器模型 4 3.2语法分析表设计 5 4中间代码形式的描述及中间代码序列的结构设计 6 4.1中间代码形式的描述 6 4.2中间代码序列的结构设计 6 5 编译系统的概要设计 6 6 详细的算法描述 7 6.1系统流程图 7 6.2算法描述 7 7 软件的测试方法和测试结果 18 7.1软件的测试方法 18 7.2测试结果 18 8设计的特点、不足、收获与体会 21 8.1特点与不足 21 8.2收获与体会 21 9 参考文献 21 10本科生课程设计成绩评定表……………………………………………………………………………………………….22 IF-ELSE条件语句的翻译程序设计 (LR方法、输出四元式) 1 系统描述(问题域描述) 对条件语句: if 〈布尔表达式〉then〈赋值语句〉 else 〈赋值语句〉, 进行词法,LR(1)语法分析,并根据语法制导翻译方法将条件语句翻译成四元式中间代码形式,最后输出翻译后的四元式代码。 2 文法及属性文法的描述 2.1文法 G[S]: S-CS S-TS S-A C-if E then T-CS else T-else 其中,E代表布尔表达式,可由界符()括起来,A代表赋值表达式。在这里E、A都代表终结符,具体的表达式在程序会判断其类型。 2.2 属性文法 S-C S {S.clain:=merge(C.clain,S.clain)} S-T S { S.clain:=merge(T.clain,S.clain)} S-A {S.clain:0/* 空链 */} C-if E then {backpatch(E.true,nextstat) C.clain:=E.false} T-C S else { q:=nextstat Emit(‘GOTO’ —) Backpatch(C.clain,nextstat) T.clain:=merge(S.clain,q)} 3 语法分析方法描述及语法分析表设计 3.1语法分析方法描述 3.1.1 LR方法的基本思想 一个LR分析器实质上是一个带先进后出存储器的确定有限状态自动机。我们将把“历史”和“展望”材料综合地抽象成某些“状态”。分析栈用来存放状态。栈里的每个状态概括了从分析开始直到某一归约阶段的全部“历史”和“展望”资料。任何时候,栈顶的状态都代表了整个的历史和已推测出的展望。因此,在任何时候都可从栈顶状态得知所想了解的一切,而绝对没有必要从称底而上翻阅整个栈。LR分析器的每一步工作都是由栈顶 状态和现行输入符号所唯一决定的。为了有助于明确归约手续,我们把已归约出的文法符号串也同时放在栈里。于是,我们可以把栈的结构看成是: 栈的每一项内容包括状态S和文法符号X两部分。(S0,#)为分析开始前预先放到栈里的初始状态和句子括号。栈顶状态为SM,符号串X1X2….XM是至今已移进归约出的部分。 3.1.2 LR分析器模型 LR分析器模型如下图: LR分析器的核心部分是一张分析表。这张分析表包括两部分,一是“动作”(ACTION)表,另一个是“状态转换表”(GOTO)表。它们都是二维数组。ACTION[s,a]规定了当状态s面临输入符号a时应采取什么动作。GOTO[s,a]规定了状态s面对文法符号X(终结符或非终结符)时下一个状态是什么。显然GOTO[S,x]定义了一个以文法符号为字母表的DFA。 每一项ACTION[s,a]所规定的动作不外是下述四种可能之一: 1. 移进 把(S,A)的下一状态S=GOTO[S,A]和输入符号A推进栈,下一输入符号变成现行输入状态。 2. 规约 指用某一产生式A- 进行规约。假若 的长度为r,归约动作是A,去除栈顶的r个项,使状态Sm-r变成栈顶状态,然后把(Sm-r,A)的下一状态S1=GOTO[Sm-r,A]和文法符号A推进栈。归约动作不改变现行输入符号。执行归约动作意味着(=Xm-r+1….Xm)已呈现于栈顶而且是一个相对于A的句柄。 3. 接受 宣布分析成功,停止分析器的工作。 4. 报错 发现源程序含有错误,调用出错处理程序。 LR分析器的总控程序本身的工作是非常简单。它的任何一步只需要按栈顶状态和现行输入符号a执行ACTION[S,a]所规定的动作。不管什么分析表,总控程序都是一样地工作。 一个LR分析器的工作过程可看成是栈里的状态序列,已归约串和输入串所

文档评论(0)

yyf7373 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档