【精品】【考研计算机专业课】天津大学 编译原理讲义 中间代码表示法5.2(可编辑.ppt
《【精品】【考研计算机专业课】天津大学 编译原理讲义 中间代码表示法5.2(可编辑.ppt》由会员分享,可在线阅读,更多相关《【精品】【考研计算机专业课】天津大学 编译原理讲义 中间代码表示法5.2(可编辑.ppt(32页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、【考研计算机专业课】天津大学 编译原理讲义 中间代码表示法5.2这种表示表达式的方法称为这种表示表达式的方法称为后缀式后缀式。ab+把双目运算符放在两个运算量的中间的把双目运算符放在两个运算量的中间的中缀表示法中缀表示法。a+b 把运算符放在其运算量前面的把运算符放在其运算量前面的前缀表示法前缀表示法。+ab共同的特点是共同的特点是:1.操作符的个数不变操作符的个数不变 2.操作数的次序和个数不变操作数的次序和个数不变 逆波兰表示法还具有两个明显的优点逆波兰表示法还具有两个明显的优点:1.无括号,形式简洁清楚无括号,形式简洁清楚 2.操作符的顺序与运算的次序完全相同操作符的顺序与运算的次序完全
2、相同 1.一般表达式一般表达式(中缀式中缀式)转化成逆波兰式转化成逆波兰式(后缀式后缀式)(1)从整体到局部的方法从整体到局部的方法设设e是给定表达式,是给定表达式,是相应的逆波兰式是相应的逆波兰式则则=a 其中其中:运算量运算量 a变量变量(暂只考虑简单变量,常数暂只考虑简单变量,常数)例例,=*=*=a*cd*=ab*+*cd*=例例,=*=ab*cd*=a+*cd*=abcd*+*cd*(2)自左向右扫描的方法自左向右扫描的方法 将表达式中的所有变量按原顺序排列。将表达式中的所有变量按原顺序排列。设有子表达式设有子表达式e1e2,则称,则称e2的后继符为的后继符为(运算符运算符)的分界的
3、分界符,把每个运算符移到相应的分界符处,并去掉括号符,把每个运算符移到相应的分界符处,并去掉括号;若一个若一个符号是多个运算符的分界符,则按符号是多个运算符的分界符,则按“后者先移后者先移”的原则进行。的原则进行。例例:a*(b+c)逆波兰式逆波兰式 abc+abc+*例例:a*(b*cd)e逆波兰式逆波兰式 abc abc*d-d-*e-e-栈栈当前输入符当前输入符后缀式后缀式空空aab+c*ab bb+c*ab+c*E1 cc*E1c*E23.后缀式的推广后缀式的推广我们可以将后缀式简单的推广到比表达式更大的范围。我们可以将后缀式简单的推广到比表达式更大的范围。例例,如下的条件算术表达式,
4、如下的条件算术表达式:e?x:y表示若表示若e0,则此式值为,则此式值为x;否则,为否则,为y。若把若把e?x:y表示成表示成一个三目运算一个三目运算exy,这种方式出现的,这种方式出现的问题问题是是:任何情况下,第二目任何情况下,第二目x和第三目和第三目y均得计算一次,会造成时均得计算一次,会造成时间的浪费。间的浪费。克服它的一种可行办法是克服它的一种可行办法是引进标号引进标号,条件转移和无条件转移算符条件转移和无条件转移算符。令后缀式存放在令后缀式存放在一维数组一维数组POST1:n中,每个数组元素存中,每个数组元素存放一个运算量或运算符或标号。放一个运算量或运算符或标号。所引进的标号是一
5、个下标,指向数组的某元素。所引进的标号是一个下标,指向数组的某元素。无条件转移无条件转移 j,如如pj表示表示:转移到转移到POSTp(单目算符单目算符)。条件转移条件转移 j(小于转移算符小于转移算符),如,如 e1e2pj表示表示:若若e1小于小于e2,则转移到则转移到POSTp(三目算符三目算符)。jez(0转移算符转移算符),如,如 epjez表示表示:若若e等于等于false,则转移到则转移到POSTp(双目算符双目算符)。jnz(非非0转移算符转移算符),如,如 epjnz表示表示:若若e不不等于等于false,则转移到则转移到POSTp(双目算符双目算符)。用后缀式来表示各种语句
6、。用后缀式来表示各种语句。(1)赋值语句的逆波兰式赋值语句的逆波兰式赋值语句赋值语句x:=e逆波兰式逆波兰式:=(2)转移语句的逆波兰式转移语句的逆波兰式 转移语句转移语句gotoL,其中其中L是标号。是标号。逆波兰式逆波兰式Lj,其中其中j是单目算符,转向标号处。是单目算符,转向标号处。(3)条件语句的逆波兰式条件语句的逆波兰式条件语句条件语句:ifethenxelsey逆波兰式逆波兰式:ep1jezxp2jp1:yp2:其中,后跟冒号的标号并不真正出现在后缀式中,它们仅其中,后跟冒号的标号并不真正出现在后缀式中,它们仅仅在书面上指明有关式子的开始位置。仅在书面上指明有关式子的开始位置。在在
7、POST中出现的后缀式将是中出现的后缀式将是:ep1jezxp2jyp1p2例例:ifabthenx:=a+belsey:=a-b逆波兰式表示为逆波兰式表示为:abi+jthenk:=k-1;goto10beginendelsek:=i*i-j*j;i:=0;j:=0;beginend逆波兰表示为逆波兰表示为:(2)k100:=(3)kij+jez(0转转)(4)kk1-:=(6)kii*jj*-:=(7)i0:=(1)block(9)blockend(8)j0:=(3)kij+6jez(0转转)(5)3j(4)循环语句的逆波兰表示循环语句的逆波兰表示循环语句循环语句:for(i=a;ib;i
8、+)s,先将其变成等价的条,先将其变成等价的条件语句件语句:i:=a;10:ifi=bthenbegins;i:=i+1;goto10end然后按条件语句形式转换。然后按条件语句形式转换。例例,循环语句,循环语句for(i=1;i=100;i+)s=s+i;先展成等价的条件语句先展成等价的条件语句:i:=1;10:ifi=100thenbegins:=s+i;i:=i+1;goto10end然后转换成逆波兰式然后转换成逆波兰式:(1)i1:=(4)i100=21jez(9)ssi+:=(14)ii1+:=(19)4j(21)4.语法制导生成后缀式语法制导生成后缀式原理性描述如下原理性描述如下:
9、产生式产生式语义动作语义动作(1)EE(1)opE(2)E.CODE=E(1).CODEE(2).CODEop(2)E(E(1))E.CODE=E(1).CODE(3)EiE.CODE=i其中其中:E.CODE后缀式符号串后缀式符号串“捻接捻接”操作操作i标识符标识符(如如a或或b或或c)第第(1)产生式语义动作的意思是,产生式语义动作的意思是,E的后缀式等于的后缀式等于E(1)和和E(2)两后缀式的捻接,而后再接上算符两后缀式的捻接,而后再接上算符op。第第(2)产生式的语义动作指出,把括号无条件地去掉。产生式的语义动作指出,把括号无条件地去掉。第第(3)产生式的语义动作说明,标识符的语义值
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精品 考研计算机专业课 【精品】【考研计算机专业课】天津大学 编译原理讲义 中间代码表示法5.2可编辑 考研 计算机 专业课 天津大学 编译 原理 讲义 中间 代码 表示 5.2 编辑
限制150内