问题 单项选择题

通常一个编译程序中,不仅包含词法分析,语法分析,中间代码生成,代码优化,目标代码生成等五个部分,还应包括()。

A.模拟执行器

B.解释器

C.表格处理和出错处理

D.符号执行器

答案

参考答案:C

解析:

目前,编译程序一般采用语法制导翻译技术进行语义分析和生成中间代码,概括说明如下所述。

根据语义分析和生成中间代码的需要,给每个文法符号设置若干个属性,用以表示它的语义信息。例如,变量可设置类型、层次、内存单元地址等;表达式可设置类型、中间代码等。然后对语言的文法进行扩充,对每条产生式编写一个语义子程序(或函数),用以计算有关文法符号的属性值,即在语法分析过程中使用这条产生式进行语法分析时,调用它的语义子程序完成相应的语义分析和翻译任务。随着语法分析的步步进展,当一条产生式获得匹配(自顶向下分析)或用于归约(自底向上分析)时,就执行这条产生式所对应的语义子程序进行翻译,这种方法称作语法制导翻译。它既适用于自顶向下分析,又适用于自底向上分析。

例如,若仅把赋值语句翻译成四元式形式的中间代码,下面给出了每个产生式及相应的翻译子程序。

S→id=E { p=Entry(id.name);

if(p!=NULL)GEN(:=,E.place,-,p);else error;}

E→E1+E2 { E.place=newtemp;

GEN(+,E1.place, E2.place, E.place);}

E→E1*+E2 { E.place=newtemp;

GEN(*,E1.place, E2.place, E.place);}

E→id { p=Entry(id.name);

if(p!=NULL)E.place=p; else error; }

选择题
填空题