《编译原理》课程简介 (50).pdf

上传人:奉*** 文档编号:67733456 上传时间:2022-12-26 格式:PDF 页数:18 大小:2.37MB
返回 下载 相关 举报
《编译原理》课程简介 (50).pdf_第1页
第1页 / 共18页
《编译原理》课程简介 (50).pdf_第2页
第2页 / 共18页
点击查看更多>>
资源描述

《《编译原理》课程简介 (50).pdf》由会员分享,可在线阅读,更多相关《《编译原理》课程简介 (50).pdf(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、编译原理 C O M P I L A T I O N P RIN C IP LE 第七章 语义分析和中间代码产生7.2 中间代码形式7.2 中间代码形式源程序源程序词法分析器词法分析器语法分析器语法分析器语义分析器语义分析器中间代码生成器中间代码生成器代码优化器代码优化器代码生成器代码生成器目标程序目标程序出错管理器出错管理器符号表管理器符号表管理器7.2 中间代码形式中间代码:n介乎源语言与目标代码之间,比源语言简单,比目标代码复杂。n区分编译器的前端与后端,方便提出针对新机器的编译器。n可以设计针对中间代码的优化器。7.2 中间代码形式n何谓中间代码p源程序的一种内部表示,不依赖目标机的结

2、构,易于机械生成目标代码的中间表示。n为什么要此阶段?p逻辑结构清楚;利于不同目标机上实现同一种语言;利于进行与机器无关的优化;这些内部形式也能用于解释。n中间代码的几种形式p逆波兰式、三地址代码(包括三元式、间接三元式、四元式)等等。7.2 中间代码形式v逆波兰表示法n逆波兰表示法又称后缀式,它把运算量写在前面,而把运算符写在后面。n一般来说,一个K目运算符(K=1)Q,其K个运算量为e1,ek,则它们进行Q运算的逆波兰表示式为e1e2ekQn特点:只要知道每个运算符的目数,无论从哪端开始扫描,均能对后缀表达式进行唯一正确的分解。7.2 中间代码形式v后缀式的计算n自左至右扫描后缀式,每碰到

3、运算量就把它推进栈;每碰到k目运算符就把它作用于栈顶的k项,并用结果替换这k项。.返回值和参数控制链访问链和机器状态局部数据临时数据栈返回值和参数控制链访问链和机器状态局部数据临时数据base_sptop_sp8484442462n最大优点:便于计算机处理表达式。例:(8 4)+2的后缀表示是8 4 2+7.2 中间代码形式v语法制导生成后缀式n 设E.CODE 表示构成E的后缀式符号串,|表示两串相连。语义动作可写成:产生式语义动作 EE(1)OP E(2)E.CODE:=E(1).CODE|E(2).CODE|OPE(E(1)E.CODE:=E(1).CODE Eid E.CODE:=id

4、 n例:(a+b)*c d 的后缀式 a+b的后缀式为ab+,(a+b)的后缀式为ab+,(a+b)*c的后缀式为ab+c*(a+b)*c-d的后缀式为ab+c*d-后缀表达式不需要括号。7.2 中间代码形式v三地址代码n 三地址代码由下面的一般形式的语句构成:x:=y op zn其中,x、y、z为名字、常量或编译时产生的临时变量;op代表运算符号如逻辑运算符等。n表达式x+y*z翻译成的三地址语句序列是t1:=y*z t2:=x+t1 .返回值和参数控制链访问链和机器状态局部数据临时数据t1,t2是 临时变量栈中,存放在局部数据的下面7.2 中间代码形式n例:a:=(-b+c*d)+c*d三

5、地址代码表示:语法树表示duminusassigna+*cbcdt1:=-bt2:=c*dt3:=t1+t2t4:=c*dt5:=t3+t4a:=t57.2 中间代码形式n1、赋值语句x:=y op z,op为二元算符或逻辑算符 n2、赋值语句x:=op y,op为一元算符n3、复制语句x:=y,将y的值赋给xn4、无条件转移goto Ln5、条件转移if x relop y goto L或if x goto Ln6、过程调用param x 和call p,n,以及返回语句return yn7、索引赋值x:=yi 和 xi:=yn8、地址和指针赋值x:=&y,x:=*y和*x:=y v常用的三

6、地址语句7.2 中间代码形式n三元式的三个部分1(OP,ARG1,ARG2)2(算符,第一运算量,第二运算量)3表达式及各种语句均可表示成一组三元式。p例:x:=-A+B*C表示为:(1)(uminus,A,-)(2)(*,B,C)(3)(+,(1),(2)(4)(:=,X,(3)p对一目运算符OP,两个运算量只用一个;对多目算符,用多个相继三元式表示。v三元式7.2 中间代码形式v语法制导翻译产生式语义规则(1)EE(1)OP E(2)E.val:=Gen(OP,E(1).val,E(2).val)(2)E(E(1)E.val:=E(1).val(3)E-E(1)E.val:=Gen(umi

7、nus,E(1).val,-)(4)EiE.val:=Entry(i)指向i的地址7.2 中间代码形式v间接三元式n除三元式表外,另设一个间接码表,按运算的先后顺序列出有关三元式在三元式表中的位置。n例:I:=I+1;I=I+1;I=I+1;三元式码表 (i)(+,I,1)(i+1)(:=,I,(i)间接码表 (1)(i)(2)(i+1)(3)(i)(4)(i+1)(5)(i)(6)(i+1)7.2 中间代码形式n例:语句:X:=(A+B)*C Y:=D(A+B)的间接三元式表示为三元式表间接代码 (1)(2)(3)(1)(4)(5)OP ARG1 ARG2(1)(2)(3)(4)(5)+A

8、B *(1)C :=X (2)D (1):=Y (4)n间接三元式表的优点:节省空间;优化时若要调整顺序,三元式码表无需改动。7.2 中间代码形式v四元式n四元式是一种比较普遍采用的中间代码形式,形式为(OP,ARG1,ARG2,Result)。n例:A:=-B*(C+D)的四元式序列为:(1)(uminus,B,-,T1)(2)(+,C,D,T2)其中:T1、T2、T3为临时变量。(3)(*,T1,T2,T3)(4)(:=,T3,-,A)n显然,四元式之间的联系是通过临时变量实现的,因此修改四元式序列容易,修改三元式序列困难。7.2 中间代码形式n例:A+B*(C-D)+E/(C-D)N逆波

9、兰:A B C D-*+E C D N /+四元式:(1)(-C D T1)(2)(*B T1 T2)(3)(+A T2 T3)(4)(-C D T4)(5)(T4 N T5)(6)(/E T5 T6)(7)(+T3 T6 T7)三元式:(1)(-C D )(2)(*B (1)(3)(+A (2)(4)(-C D )(5)(4)N )(6)(/E (5)(7)(+(3)(6)间接三元式:间接三元式序列 间接码表(1)(-C D )(1)(2)(*B (1)(2)(3)(+A (2)(3)(4)(1)N )(1)(5)(/E (4)(4)(6)(+(3)(5)(5)(6)|编译原理谢 谢Thanks

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁