《第四章-语法制导的翻译-复习+习题ppt课件.ppt》由会员分享,可在线阅读,更多相关《第四章-语法制导的翻译-复习+习题ppt课件.ppt(28页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用4.3 L属性定义的自上而下计算属性定义的自上而下计算L属性定义翻译方案消除左递归预测翻译器的设计用综合属性代替继承属性1经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用4.3 L属性定义的自上而下计算关于算术表达式的左递归文法相应的翻译模关于算术表达式的左递归文法相应的翻译模式式EE1+TE.val:=E1.val+T.valEE1-T E.val:=E1.val-T.valET E
2、.val:=T.valT(E)T.val:=E.valTnumT.val:=num.valE T RR +T R1R -T R1R T (E)T num2经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用 E TR.i:=T.val RE.val:=R.sR +TR1.i:=R.i+T.val R1R.s:=R1.sR -TR1.i:=R.i-T.val R1R.s:=R1.sR R.s:=R.iT (E)T.val:=E.valT numT.val:=num.valE T RR +TR1R -TR1R T (E)
3、T numR.i:R前面子表达式前面子表达式 的值的值R.s:分析完分析完R时子表时子表 达式的值达式的值消除左递归,构造新的翻译模式消除左递归,构造新的翻译模式3经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用ETRnumnum.val=9T.val=9R.i=9-TRnumnum.val=5T.val=5R.i=4+TRnumnum.val=2T.val=2R.i=6 R.s=6R.s=6R.s=6E.val=6E T R.i:=T.val R E.val:=R.s R +T R1.i:=R.i+T.val
4、R1 R.s:=R1.s R -T R1.i:=R.i-T.val R1 R.s:=R1.s R R.s:=R.i T (E)T.val:=E.val T num T.val:=num.val 计算表达式计算表达式9524经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用构造抽象语法树的属性文法定义转化成翻译模式构造抽象语法树的属性文法定义转化成翻译模式 EE1+TE.nptr:=mknode(+,E1.nptr,T.nptr)EE1-TE.nptr:=mknode(-,E1.nptr,T.nptr)ETE.npt
5、r:=T.nptr5经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用E TR.i:=T.nptr RE.nptr:=R.sR +TR1.i:=mknode(+,R.i,T.nptr)R1R.s:=R1.sR -TR1.i:=mknode(,R.i,T.nptr)R1R.s:=R.sR R.s:=R.iT(E )T.nptr:=E.nptrT idT.nptr:=mkleaf(id,id.entry)T num T.nptr:=mkleaf(num,num.val)构造抽象语法树的属性文法定义转化成翻译模式构造抽象
6、语法树的属性文法定义转化成翻译模式 6经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用使用继承属性构造使用继承属性构造a4c的抽象语法树的抽象语法树ETRidTo entry for aidT.nptr-Tnumnum4T.nptrR.i-R+TRidTo entry for cidT.nptrR.i+R.i R.sR.sR.sE.nptrE T R.i:=T.nptr R E.nptr:=R.sR +T R1.i:=mknode(+,R.i,T.nptr)R1 R.s:=R1.sR -T R1.i:=mknod
7、e(,R.i,T.nptr)R1 R.s:=R.sR R.s:=R.iT (E )T.nptr:=E.nptrT id T.nptr:=mkleaf(id,id.entry)T num T.nptr:=mkleaf(num,num.val)7经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用本章使用的两类方法分析树方法 构造分析树属性依赖图确定属性的计算次序边分析边进行属性计算的方法S属性的自下而上计算(边分析边计算)。L属性的自上而下计算(边分析边计算)。L属性的自下而上计算(边分析边计算)。优点:效率高缺点:结
8、点访问次序受分析方法限制。8经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用语语语语义义义义规规规规则则则则的的的的两两两两种种种种描描描描述述述述方方方方法法法法:语语语语法法法法制制制制导导导导的的的的定定定定义义义义和和和和翻翻翻翻译译译译方方方方案。案。案。案。设设设设计计计计简简简简单单单单问问问问题题题题的的的的语语语语法法法法制制制制导导导导定定定定义义义义和和和和翻翻翻翻译译译译方方方方案案案案,这这这这是是是是本本本本章章章章的重点和难点。的重点和难点。的重点和难点。的重点和难点。S S属性的自
9、下而上计算(边分析边计算)属性的自下而上计算(边分析边计算)属性的自下而上计算(边分析边计算)属性的自下而上计算(边分析边计算)。L L属性的自上而下计算(边分析边计算)属性的自上而下计算(边分析边计算)属性的自上而下计算(边分析边计算)属性的自上而下计算(边分析边计算)。L L属性的自下而上计算(边分析边计算)属性的自下而上计算(边分析边计算)属性的自下而上计算(边分析边计算)属性的自下而上计算(边分析边计算)。语法制导翻译 要 点9经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用例 题 1为文法为文法S (L
10、)|aL L,S|S写一个语法制导定义,它输出括号的对数。写一个语法制导定义,它输出括号的对数。首先,分析问题首先,分析问题首先,分析问题首先,分析问题(1 1)需要定义哪些属性值)需要定义哪些属性值)需要定义哪些属性值)需要定义哪些属性值 属性属性属性属性numnum,表示相应符号中括号的对数,表示相应符号中括号的对数,表示相应符号中括号的对数,表示相应符号中括号的对数(2 2)属性值为哪些符号定义?)属性值为哪些符号定义?)属性值为哪些符号定义?)属性值为哪些符号定义?L,SL,S(3 3)numnum属性属于综合属性还是继承属性?属性属于综合属性还是继承属性?属性属于综合属性还是继承属性
11、?属性属于综合属性还是继承属性?综合属性!因为产生式左部综合属性!因为产生式左部综合属性!因为产生式左部综合属性!因为产生式左部符号的符号的符号的符号的numnum值要依赖于产生值要依赖于产生值要依赖于产生值要依赖于产生式右部每个符号的属性值式右部每个符号的属性值式右部每个符号的属性值式右部每个符号的属性值10经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用例 题 1为文法为文法S (L)|aL L,S|S写一个语法制导定义,它输出括号的对数。写一个语法制导定义,它输出括号的对数。S S S Sprintprin
12、t(S S.numnum)S S (L L)S S.numnum:=:=L L.numnum+1+1S S a aS S.numnum:=0:=0L L L L1 1,S SL L.numnum:=:=L L1 1.numnum+S S.numnumL L S SL L.numnum:=:=S S.numnum 11经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用为文法为文法为文法为文法S S (L L)|)|a aL L L L,S S|S S写一个语法制导定义,它输出括号的对数。写一个语法制导定义,它输出括号
13、的对数。写一个语法制导定义,它输出括号的对数。写一个语法制导定义,它输出括号的对数。构建翻译方案对应的代码段:构建翻译方案对应的代码段:构建翻译方案对应的代码段:构建翻译方案对应的代码段:S S S Sprintprint(valtopvaltop)S S (L L)S S.numnum:=:=L L.numnum+1 +1 S S a aS S.numnum:=0 :=0 L L L L1 1,S SL L.numnum:=:=L L1 1.numnum+S S.num num L L S SL L.numnum:=:=S S.numnum 栈栈栈栈 state valstate val例
14、题 1.S SS S.numnum.toptop12经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用为文法为文法为文法为文法S S (L L)|)|a aL L L L,S S|S S写一个语法制导定义,它输出括号的对数。写一个语法制导定义,它输出括号的对数。写一个语法制导定义,它输出括号的对数。写一个语法制导定义,它输出括号的对数。S S S Sprintprint(valtopvaltop)S S (L L)valtop-2:=valtop-1valtop-2:=valtop-1S S a aS S.numn
15、um:=0:=0L L L L1 1,S SL L.numnum:=:=L L1 1.numnum+S S.numnumL L S SL L.numnum:=:=S S.numnum 栈栈栈栈 state valstate val例 题 1)L LL L.num.num(.toptop13经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用为文法为文法为文法为文法S S (L L)|)|a aL L L L,S S|S S写一个语法制导定义,它输出括号的对数。写一个语法制导定义,它输出括号的对数。写一个语法制导定义,
16、它输出括号的对数。写一个语法制导定义,它输出括号的对数。S S S Sprintprint(valtopvaltop)S S (L L)valtop-2:=valtop-1valtop-2:=valtop-1S S a avaltop:=0valtop:=0L L L L1 1,S SL L.numnum:=:=L L1 1.numnum+S S.numnumL L S SL L.numnum:=:=S S.numnum 栈栈栈栈 state valstate val例 题 1a a.toptop14经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为
17、消费者购买商品的价款或接受服务的费用为文法为文法为文法为文法S S (L L)|)|a aL L L L,S S|S S写一个语法制导定义,它输出括号的对数。写一个语法制导定义,它输出括号的对数。写一个语法制导定义,它输出括号的对数。写一个语法制导定义,它输出括号的对数。S S S S printprint(valtopvaltop)S S (L L)valtop-2:=valtop-1valtop-2:=valtop-1S S a a valtop:=0valtop:=0L L L L1 1,S S valtop-2:=valtop-2+valtopvaltop-2:=valtop-2+va
18、ltopL L S SL L.numnum:=:=S S.numnum 栈栈栈栈 state valstate val例 题 1S SS.numS.num,L L1 1L L1 1.num.num.toptop15经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用为文法为文法为文法为文法S S (L L)|)|a aL L L L,S S|S S写一个语法制导定义,它输出括号的对数。写一个语法制导定义,它输出括号的对数。写一个语法制导定义,它输出括号的对数。写一个语法制导定义,它输出括号的对数。S S S S pr
19、intprint(valtopvaltop)S S (L L)valtop-2:=valtop-1valtop-2:=valtop-1S S a a valtop:=0valtop:=0L L L L1 1,S S valtop-2:=valtop-2+valtopvaltop-2:=valtop-2+valtopL L S S -例 题 1S SS.numS.num.栈栈栈栈 state valstate valtoptop16经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用为文法为文法为文法为文法S S (L
20、 L)|)|a aL L L L,S S|S S写一个翻译方案,它输出每个写一个翻译方案,它输出每个写一个翻译方案,它输出每个写一个翻译方案,它输出每个a a的嵌套深度。例如,对的嵌套深度。例如,对的嵌套深度。例如,对的嵌套深度。例如,对于于于于(a a,(,(a a,a a),输出的结果是输出的结果是输出的结果是输出的结果是1 2 21 2 2。S S.depth:=0 SS L.depth:=S.depth+1 (L)S a print(S.depth)L L1.depth:=L.depth L1,S.depth:=L.depth SL S.depth:=L.depth S外层括号数目外层
21、括号数目外层括号数目外层括号数目例 题 217经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用为文法为文法为文法为文法S S (L L)|)|a aL L L L,S S|S S写一个翻译方案,它打印出每个写一个翻译方案,它打印出每个写一个翻译方案,它打印出每个写一个翻译方案,它打印出每个a a在句子中是第几个字在句子中是第几个字在句子中是第几个字在句子中是第几个字符。例如,当句子是符。例如,当句子是符。例如,当句子是符。例如,当句子是(a a,(,(a a,(,(a a,a a),(),(a a)时,打时,打时
22、,打时,打印的结果是印的结果是印的结果是印的结果是2 5 8 10 142 5 8 10 14。S S.in:=0 SS (L.in:=S.in+1 L)S.num:=L.num+2 S a S.num:=1;print(S.in+1)L L1.in:=L.in L1,S.in:=L1.in+L1.num+1 S L.num:=L1.num+S.num+1 L S.in:=L.in S L.num:=S.num 例 题 318经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用4.5 给出对表达式求导数的语法制导定义
23、,表达式由+和*作用于变量x 和常数组成,如x*(3*x+x*x),并假定没有任何化简,例如将3*x 翻译成 3*1+0*x。经分析可知对每个文法符号需要有两个属性.exp用来记录原表达式.s用来记录该表达式求导的结果19经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用E E n print(E.s)E E1+T E.exp=E1.exp +T.exp E.s=E1.s +T.sE T E.exp=T.exp E.s=T.sT T1*F T.exp=T1.exp *F.exp T.s=(T1.s )*F.exp
24、+T1.exp *F.sT F T.exp=F.exp T.s=F.s F (E)F.exp=(E.exp )F.s=(E.s )F num F.exp=num.lexme F.s=0 F x F.exp=x F.s=1 20经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用4.7 令综合属性令综合属性val表示表示S产生的二进制数的值。产生的二进制数的值。S L.L|LL L B|BB 0|1(a)试用各有关综合属性综合属性决定S.val.如果只有整数部分,很显然,可以定义如下:S L S.val=L.val;L
25、 L1 B L.val=L1.val*2+B.val;L B L.val=B.val;L.b=2;B 0 B.val=0;B 1 B.val=1;21经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用为了求小数部分小数部分的值,引入L的综合属性b记录2的L的位数次幂值(2 length of L)S L1.L2 S.val=L1.val+L2.val/L2.b;S L S.val=L.val;L L1 B L.val=L1.val*2+B.val;L.b=L.b*2;L B L.val=B.val;L.b=2;B
26、0 B.val=0;B 1 B.val=1;22经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用 S val L v .L b v L v B v L b v B v B v 0 L b v B v 1 1 B v 0 123经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用 S val L v .L b v L v B v L b v B v B v 0 L b v B v 1 1 B v 0 1=1=1=0=2=1=1=0=1=2
27、=5=2=4=8=2+5/8=2.62524经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用(b)试用一个语法制导定义来决定S.val,在这个定义中B仅有综合 属性c,给出由B生成的位对于最后的数值的分担额.引入B的继承属性i,综合属性cS L1.L2 L1.i=20;L2.i=2-1;S.val=L1.val+L2.valS L L.i=20;S.val=L.val;L L1 B if L.i=20 then begin L1.i=L.i*2;B.i=L.i end else begin L1.i=L.i;L.
28、s=L1.s/2;B.i=L1.s end L.val=L1.val+B.c L B B.i=L.i;L.s=L.i/2;L.val=B.cB 0 B.c=B.i*0B 1 B.c=B.i*125经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用 S val L v .L s v L v B c L s v B c B c 0 L s v B c 1 1 B c 0 1=2=0*1=0.5=0*0.25=0.125=2.62526经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿
29、的金额为消费者购买商品的价款或接受服务的费用 S val i L v .i L s vi L v i B c i L s v i B ci B c 0 i L s v i B c 1 1 i B c 0 127经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用 S val i L v .i L s vi L v i B c i L s v i B ci B c 0 i L s v i B c 1 1 i B c 0 1=20=2-1=21=20=21=2-1=2-1=2-1=2-2=2-2=2-3=2-3=2-4=2-1=0.5=0.5=2-2*0=0=2-3*1=0.125=0.5=0.5+0.125=0.625=2.62528