编译原理课件15.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:47 大小:484KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

编译原理课件15.ppt

编译原理课件15.ppt

预览

免费试读已结束,剩余 37 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

5.6程序流控制语句的翻译5.6.1常见控制结构的翻译有关控制结构文法的注解条件语句的处理方法条件语句的翻译结构属性文法结构分析改造文法的两种途径两种文法改造方法的比较控制语句的翻译文法2.Statement→ConditionStatement{$$.Chain=Merge($1.Chain,$2.Chain);}此时,所翻译的是if-then语句结构,原条件语句的布尔表达式Expr的F链的去向应和then后的语句的出口一致,而归约所得的语句Statement的出口尚未确定(因为该语句可能是更复杂语句结构中的子语句),因此应将这两条链合并成一个大链,待合适的时候回填。这里,Statement的属性Chain用于描述本语句结构的所有出口的链首。3.CondStElse→ConditionStatementelse{intq=NXQ;GEN(j,0,0,0);BackPatch($1.Chain,NXQ);$$.Chain=Merge($2.Chain,q);}此时,编译系统已明确当前正在处理的是if-then-else结构,then后所跟的S(即(5.9)式中的S(1))已经处理完毕,且else后所跟的S(即(5.9)式中的S(2))第一四元式的位置已经可以确定。在翻译S(2)之前,应紧接S(1)的四元式序列后产生一个无条件转四元式,并将此四元式与S(1)的出口链合而为一,作为整个S的出口,这一信息将作为CondStElse的综合属性Chain传递上去;另外,Expr的假出口(即Condition的综合属性)此时可回填。4.Statement→CondStElseStatement{$$.Chain=Merge($1.Chain,$2.Chain);}此时,整个条件语句已经翻译完毕,应将S(1)与S(2)的出口合而为一,作为整个S的出口链待以后回填(注意,S的出口未必是下一四元式,因为,S本身也可能作为一个语法成分出现在更复杂的语句结构中)。5.Wl→while{$$.LoopStartPlace=NXQ;}由于while循环要求每次执行完循环体之后,应无条件转向循环判断条件Expr处,因此,需将Expr的第一四元式序号记下来,以便在翻译完S后可产生一个转向此处的四元式。6.WED→WlExprdo{BackPatch($2.TC,NXQ);$$.Chain=$2.FC;$$.LoopStartPlace=$1.LoopStartPlace;}此时,控制循环的布尔表达式Expr已经翻译完毕,循环体S的第一四元式序号已知(即NXQ的当前值),可用其回填Expr的T链;Expr的F链将是整个循环语句的出口,目前还不明去向,但由于Expr将被归约,其FC属性应作为WED的一个属性传递之;另外,Wl的属性LoopStartPlace(它描述循环起始点信息)也应作为WED的LoopStartPlace属性向上传递。7.Statement→WEDStatement{BackPatch($2.TC,$1.LoopStartPlace);GEN(j,0,0,$1.LoopStartPlace);$$.Chain=$1.Chain;}此时,整个while循环语句已经翻译完毕,但还需要做收尾工作:(1)将S(1)携带的出口链用本结构的第一四元式序号(即WED的LoopStartPlace属性)回填;(2)产生一个以此序号为转向目标的无条件转四元式;(3)由于本结构的最终出口未定,因此,它将作为Statement的Chain属性保留下来,待回填。8.Statement→Assignment{$$.Chain=0;}由于赋值语句不含其它非常规出口(无出口链),所以,Statement的出口链为空。9.Series→Statement{$$.Chain=$1.Chain;}由于Statement的出口链属性在此时仍不能确定出口在何处,所以,应作为Series的属性传递之。10.SeiesSemicolon→Series‘;’{BackPatch($1.Chain,NXQ);}此时,分析器刚扫视完分号,控制流程将顺序执行,所以应以下一个四元式的序号回填Series的出口链。11.Series→SeriesSemicolonStatement{$$.Chain=$2.Chain;}语义动作的含义与产生式9类似。12.Statement→beginSeriesend{$$.Chain=$2.Chain;}显然,复合语句的出口(即Series的属性)尚未确定去向,故将其作为Statement的属性保留(传递)之。控制语句翻译应用举例第二步对第一步所得句型Wl(a<b)doif(c>d)thenx:=y