语法制导翻译和中间代码生成

语法制导翻译和中间代码生成

ID:33369734

大小:3.05 MB

页数:121页

时间:2018-05-25

语法制导翻译和中间代码生成_第1页
语法制导翻译和中间代码生成_第2页
语法制导翻译和中间代码生成_第3页
语法制导翻译和中间代码生成_第4页
语法制导翻译和中间代码生成_第5页
资源描述:

《语法制导翻译和中间代码生成》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、语法制导翻译和中间代码生成词法分析和语法分析之后的中间代码生成,是编译第三阶段的工作。本章介绍几种典型的中间代码形式,以及产生它的算法。中间代码的形式很多,如逆波兰记号、树形表示、三元式、四元式。他们都是介于单词流与目标指令之间的“中间产品”。困难目前还不存在一种广泛接受的方式来描述为典型程序语言产生中间代码所需的邻语言的动作。原因是代码生成依赖于对语义的解释,而语义的刻划的形式化系统尚未诞生。解决办法为每一个产生式配一个翻译子程序(语义子程序、动作),在语法分析的同时执行它。这样,配上语义动作之后,既指定了串

2、的意义,同时又按这种意义规定了生成某种中间代码应作的基本动作。本章内容语法制导翻译逆波兰表示法三元式和树四元式简单算术表达式和赋值句到四元式的翻译布尔表达式到四元式的翻译控制语句的翻译数组元素的引用过程调用说明语句的翻译自上而下分析制导翻译概说在语法分析过程中,随着分析的步步进展,根据每个产生式所对应的语义子程序(语义动作)进行翻译(产生中间代码)的办法。概念5.1语法制导翻译概说标记说明描述语义动作时,需要赋予每个文法符号X(终结符或者非终结符)以种种不同方面的值,如X.TYPE(类型),X.VAL(值)等。

3、一个产生式中同一符号多次出现,用上角标来区分。EE+E表示为EE(1)+E(2)每个产生式的语义动作,写在该产生式之后的花括号内。#--S0………XX.VALSm-1YY.VALSm文法符号,无须进栈,让其进栈只是为了醒目。需要保存的某些语义信息。实际上为一个指示器,指向分析表的某一行。语法制导的一个具体实现先对LR分析器的栈作一些改进,加入语义值。STATEVALSYMTOP文法及其语义动作(0)S’E{printE.VAL}(1)EE(1)+E(2){E.VAL:=E(1).VAL+E(2).VAL

4、}(2)EE(1)*E(2){E.VAL:=E(1).VAL*E(2).VAL}(3)E(E(1)){E.VAL:=E(1).VAL}(4)En{E.VAL:=LEXVAL}上述的语义动作等于给出了计算由+、*组成的整数算术式的过程。其相应的程序段如下:(0)S’EprintVAL[TOP](1)EE(1)+E(2)VAL[TOP]:=VAL[TOP]+VAL[TOP+2](2)EE(1)*E(2)VAL[TOP]:=VAL[TOP]*VAL[TOP+2](3)E(E(1))VAL[TOP]:=V

5、AL[TOP+1](4)EnVAL[TOP]:=LEXVAL若把语义动作改为产生中间代码的动作,就能随着分析的进展逐步生成中间代码。大部分的编译器都不直接产生目标代码,虽然这是可以实现的,但是产生的代码不是最优的。因为这涉及到寄存器的分配问题,在语义分析阶段,很难有效地分配它们。中间代码的必要性波兰逻辑学家卢卡西维奇(Lukasiewicz)发明的一种表示法。一般,若e1,e2为任意的后缀表达式,Θ为任意双目运算符,则用Θ作用于e1和e2所代表的结果用后缀式e1e2Θ表示。推而广之,Θ为k目运算符,则Θ作用于

6、e1e2…ek的结果用e1e2…ekΘ来表示。概念5.2逆波兰表示法a*(b+c)abc+*(a+b)*(c+d)ab+cd+*若用?表示if-then-else,则Ifathenifc-dthena+celsea*celsea+bacd-ac+ac*?ab+?示例后缀式求值使用一个栈(软件栈或者硬件栈)来求值。求值过程:从左到右扫描后缀式,每碰到运算量就把它推进栈,每碰到k目运算符就把它作用于栈顶的k个项,并用运算结果来代替这k个项。ab+c*的求值(a=1,b=3,c=5)a进栈13+5*b进栈ab相

7、加,移去两项,和置于栈顶43+1=c进栈栈顶两项相乘,移去两项,积置于栈顶5*4=20计算完毕,结果为20后缀式的控制流前面讲到,if-then-else运算符的实现”exy?”e不等于0,取x,否则取y.这种表示法要求在任何情况下都要把x,y都计算出来,尽管只用到其中一个。而且,如果运算量无定义或者有副作用,则后缀表示法不仅无效,而且可能是错误的。解决方案引入标号,在后缀式中加入条件转移,无条件转移算符。存储方式后缀式存放在一维数组POST[1..N]中,每个元素是运算符或者分量(指向符号表)。pjump

8、转到POST[p]e1e2pjlte1

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。