您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > IF-ELSE条件语句的翻译程序设计(LR方法、输出四元式)
1目录1系统描述(问题域描述)....................................................................................................22文法及属性文法的描述........................................................................................................22.1文法.............................................................................................................................22.2属性文法....................................................................................................................23语法分析方法描述及语法分析表设计................................................................................33.1语法分析方法描述.........................................................................................................33.1.1LR方法的基本思想..............................................................................................33.1.2LR分析器模型.........................................................................................................43.2语法分析表设计.............................................................................................................54中间代码形式的描述及中间代码序列的结构设计.............................................................64.1中间代码形式的描述.....................................................................................................64.2中间代码序列的结构设计.............................................................................................65编译系统的概要设计............................................................................................................66详细的算法描述....................................................................................................................76.1系统流程图.....................................................................................................................76.2算法描述.........................................................................................................................77软件的测试方法和测试结果.............................................................................................187.1软件的测试方法...........................................................................................................187.2测试结果.......................................................................................................................188设计的特点、不足、收获与体会......................................................................................218.1特点与不足...................................................................................................................218.2收获与体会...................................................................................................................219参考文献.............................................................................................................................2110本科生课程设计成绩评定表……………………………………………………………………………………………….222IF-ELSE条件语句的翻译程序设计(LR方法、输出四元式)1系统描述(问题域描述)对条件语句:if〈布尔表达式〉then〈赋值语句〉else〈赋值语句〉,进行词法,LR(1)语法分析,并根据语法制导翻译方法将条件语句翻译成四元式中间代码形式,最后输出翻译后的四元式代码。2文法及属性文法的描述2.1文法G[S]:S-CSS-TSS-AC-ifEthenT-CSelseT-else其中,E代表布尔表达式,可由界符()括起来,A代表赋值表达式。在这里E、A都代表终结符,具体的表达式在程序会判断其类型。2.2属性文法S-CS{S.clain:=merge(C.clain,S.clain)}S-TS{S.clain:=merge(T.clain,S.clain)}S-A{S.clain:0/*空链*/}C-ifEthen{backpatch(E.true,nextstat)C.clain:=E.false}T-CSelse{q:=nextstatEmit(‘GOTO’—)Backpatch(C.clain,nextstat)3T.clain:=merge(S.clain,q)}3语法分析方法描述及语法分析表设计3.1语法分析方法描述3.1.1LR方法的基本思想一个LR分析器实质上是一个带先进后出存储器的确定有限状态自动机。我们将把“历史”和“展望”材料综合地抽象成某些“状态”。分析栈用来存放状态。栈里的每个状态概括了从分析开始直到某一归约阶段的全部“历史”和“展望”资料。任何时候,栈顶的状态都代表了整个的历史和已推测出的展望。因此,在任何时候都可从栈顶状态得知所想了解的一切,而绝对没有必要从称底而上翻阅整个栈。LR分析器的每一步工作都是由栈顶状态和现行输入符号所唯一决定的。为了有助于明确归约手续,我们把已归约出的文法符号串也同时放在栈里。于是,我们可以把栈的结构看成是:栈的每一项内容包括状态S和文法符号X两部分。(S0,#)为分析开始前预先放到栈里的初始状态和句子括号。栈顶状态为SM,符号串X1X2….XM是至今已移进归约出的部分。43.1.2LR分析器模型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分析器的工作过程可看成是栈里的状态序列,已归约串和输入串所构成的三元式的变化过程。分析地的初始三元式(S0,#,a1a2…an#)其中,S0为分析器的初态;#为句子的左括号;a1a2…an为输入串;其后的#为结束符。分析5过程每步的结果可表示为(s0s1…sm,#X1X2…,ai….an#)分析器的下一步动作是由栈顶状态Sm和现行输入符号ai所唯一决定。即,执行ACTION[Sm,ai]所规定的动作。经执行每种可能的动作之后,三元式的变化的情形是:(1)若ACTION[Sm,ai]为移进,且S=GOTO[Sm,ai],则三元式变成:(S0S1…Sm,#X1X2…Xmaian#)(2)若ACTION[Sm,ai]={A-},则按产生式A-进行归约。此时三元式变为(S0S1…Sm-rS,#X1…Xm-rA,aiai+1…an#)此处S=GOTO[Sm-r,A],r为的长度,=Xm-r+1…Xm。(3)若ACTION[Sm,ai]为:接受,则三元式不再变化,变化过程终止,宣布分析成功。(4)若ACTION[Sm,ai]为“报错”,则三元式的变化过程终止,报告错误。一个LR分析器的工作过程就是一步一步地变换三元式,直至执行“接受”或“报错”为止。3.2语法分析表设计在做语法分析前需建立SLR(1)语法分析表ACTIONGOTOiteAE#SCT0S5S4S1S2S31ACC2S5S4S6S2S33S5S4S10S2S34r3r35S86S7r17r5r58S99r4r410r2r2此表中引用记号的意义是:(1)Sj把下一状态j和现行输入符号移进栈;(2)rj按第j个产生式进行规约;(3)acc接受;(4)空白格出错标志,报错;64中间代码形式的描述及中间代码序列的结构设计4.1中间代码形式的描述四元式是一种比较普遍采用的中间代码形式。四元式的四个组成部分是:操作符OP,
本文标题:IF-ELSE条件语句的翻译程序设计(LR方法、输出四元式)
链接地址:https://www.777doc.com/doc-6053821 .html