构造一个语法制导翻译程序将C语言的循环语句 for(e1;e2;e3)s 翻译成四元式表示的如下语句序列。 begin e1; while(e2)do begin S; e3 end end
采用语法制导翻译思想,达式E的“值”的描述如下:
如采用LR分析方法,给出表达式(5*4+8)*2的语法树并在各结点明语义值VAL。
赋值语句的文法及语义动作描述如下: (1)A→i:=E {GEN(:=,E.PLACE,_,ENTRY(i))} (2)E→E1+E2 {E.PLACE:=NEWTEMP;GEN(+,E1.PLACE,E2.PLACE,E.PLACE)} (3)E→E1*E2 {E.PLACE:=NEWTEMP;GEN(*,E1.PLACE,E2.PLACE,E.PLACE)} (4)E→-E1 (E.PLACE:=NEWTEMP;GEN(@,E1.PLACE,_E.PLACE)} (5)E→(E1) {E.PLACE:=E1.PLACE} (6)E→i {E.PLACE:=ENTRY(i)} 其中,GEN(:=,E.PLACE,_,ENTRY(i))表示把四元式(:=,E.PLACE,_,ENTRY(i)填入四元式表。ENTRY(i)表示i所代表的量在符号表的入口地址。E.PLACE表示存放E值的变量名在符号表的入口地址。 请写出赋值语句X:=-B*((C+D)+A的自下而上的语法制导翻译过程。
()是指源程序中不符合语法或词法规则的错误,这些错误一般在词法分析或语法分析时能检测出来。
A语义错误
B语法错误
C短语错误
D短句错误
A.SCD文件
B.IED文件
C.CID文件
D.CCD文件