欢迎来到天天文库
浏览记录
ID:14037602
大小:264.00 KB
页数:22页
时间:2018-07-25
《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本科生课程设计成绩评定表……………
2、………………………………………………………………………………….2222IF-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属
3、性文法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)22T.clain:=merge(S.clain,q)}3语法分析方法描述及语法分析表设计3.1语法分析方法描述3.1.1LR方法的基本思想一个LR分析器实质上是一
4、个带先进后出存储器的确定有限状态自动机。我们将把“历史”和“展望”材料综合地抽象成某些“状态”。分析栈用来存放状态。栈里的每个状态概括了从分析开始直到某一归约阶段的全部“历史”和“展望”资料。任何时候,栈顶的状态都代表了整个的历史和已推测出的展望。因此,在任何时候都可从栈顶状态得知所想了解的一切,而绝对没有必要从称底而上翻阅整个栈。LR分析器的每一步工作都是由栈顶状态和现行输入符号所唯一决定的。为了有助于明确归约手续,我们把已归约出的文法符号串也同时放在栈里。于是,我们可以把栈的结构看成是:栈的每一项内容包括状态S和文法符号X两部分。(S0,#)为分析开始前预先放到栈里的初始状态和句子括
5、号。栈顶状态为SM,符号串X1X2….XM是至今已移进归约出的部分。223.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]和输
6、入符号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]所规定的动作。不管什么分析表,总控程序都是一
7、样地工作。一个LR分析器的工作过程可看成是栈里的状态序列,已归约串和输入串所构成的三元式的变化过程。分析地的初始三元式(S0,#,a1a2…an#)其中,S0为分析器的初态;#为句子的左括号;a1a2…an为输入串;其后的#22为结束符。分析过程每步的结果可表示为(s0s1…sm,#X1X2…,ai….an#)分析器的下一步动作是由栈顶状态Sm和现行输入符号ai所唯一决定。即,执行ACTION[Sm,ai]所规定的动作。经执行每种可
此文档下载收益归作者所有