A-A+

构造一个语法制导翻译程序将Pascal语言的循环语句 FOR V:=m1 TO m2 DO

2022-08-12 20:23:52 问答库 阅读 197 次

问题详情

构造一个语法制导翻译程序将Pascal语言的循环语句 FOR V:=m1 TO m2 DO S1 翻译成四元式表示的如下语句序列。 BEGIN t1:==m1;t2:==m2; IF t1≤t2 THEN BEGIN V:==t1; S1 WHILE V≠t2 DO BEGIN V:==SUCC(V) S1 END END END


请帮忙给出正确答案和分析,谢谢!

参考答案

正确答案:for语句的产生式可改写为for1→for V:=m1 to m2S→for1 dO S1相应的语义子程序:for1→for V:=m1 to m2{checkType(V.typefml.typem2?type);for1.next:=NewTL;GEN(J>m1.va1m2.va1for1.next);GEN(:=m1.va1V.va1);for1.TL1:=NewTL;GEN(LABELfor1.TL1);for1.var:=V.var;for1.e2:=m2.va1}.S→for1 do S1{GEN(succfor1.varfor1.var);GEN(j<=for1.varfor1.e2for1.TL1);GEN(LABELfor1.next);}
变量V带有属性V.var,表明变量V在符号表中的地址,这样对V.Var进行的操作应通过问址进行。过程checkType(x1,x2,x3)检查参数所表示的各类型是否相容。运算符SUCC表示取运算对象值的后继。“j<”表示条件转移操作符。例如,(j<,n,m,100)表示当n<m时转移到“100”标识的四元式。

考点:语句,语法