编译原理试题集78677 下载本文

T→num 已知表达式((a)+(b))。不对文法进行修改,写出为表达式建立抽象语法树的属性文法; 并画出带注释的语法分析树来描绘抽象语法树的构造。

3. 已知上下文无关文法: E→E+T E→E-T E→T T→(E) T→id T→num 已知表达式((a)+(b))。采用自顶向下的翻译模式,写出构造抽象语法树的、消除了左递 归的翻译模式,并画出带注释的语法分析树来描绘抽象语法树的构造。

4. 试给出把中缀表达式转换成没有多余括号的中缀表达式的语法制导定义。例如,由于+和 *都是左结合的,((a*(b+c))*(d))可以写成a*(b+c)*d。

5. 下面文法产生的表达式是对整型和实型常数应用算符+形成的。当两个整数相加时,结果 为整数,否则为实数。 E→E+T | T T→num.num | num (1)给出语法制导定义确定每个子表达式的类型 (2)扩充(1)中的语法制导定义把表达式翻译成前缀形式,并且决定类型。试用一元 运算符inttoreal把整型值转换为相等的实型值,以使得前缀表达式中两个运算对象是同类型 的。

6. 令综合属性val给出在下面的文法中的S产生的二进制数的值(如,对于输入101.101,S.v al=5.625); S→L.L | L L→LB | B B→0 | 1 (1)试用各有关综合属性决定S.val; (2)试用一个语法制导定义来决定S.val,在这个定义中仅有B的综合属性,设为c,它给

出由B 生的位对于最后的数值的分担额。例如,在101.101中的第一位和最后一位对于值5.62

5的分担额分别为4和0.125。

7. 已知变量声明语句的上下文无关文法: D→TL T→int

T→real L→L1,id L→id 定义一个继承属性来完成类型信息的传递,已知输入串real id1,id2, id3,给出带注释的语法分析树,画出属性依赖图,并给出属性计算过程。

8. 已知变量声明语句的上下文无关文法: D→TL T→int T→real L→L1,id L→id 定义一个综合属性来完成类型信息的传递,已知输入串real id1,id2, id3,给出带注释的语法分析树,画出属性依赖图,并给出属性计算过程。

9. 下面文法产生的表达式是对整型和实型常数应用算符+形成的。当两个整数相加时,结果 为整数,否则为实数。 E→E+T | T T→num.num | num (1)给出语法制导定义确定每个子表达式的类型,并消除属性文法的左递归; (2)扩充(1)中的语法制导定义把表达式翻译成前缀形式,并且决定类型。试用一元 运算符inttoreal把整型值转换为相等的实型值,以使得前缀表达式中两个运算对象是同类型 的。并消除文法左递归。

10. 给出一个检查同一个标识符不在标识符表中出现两次的翻译模式。

11. 假设说明是由下列文法产生的: D→id L L→,id L|:T T→ingeger |real (1)建立一个翻译模式,把每一个标识符的类型加入到符号表中。 (2)从(1)中的翻译模式构造一个预翻译程序。 12. 已知关于盒子大小和高度的属性文法如下: 产生式 语义规则 S→B B.ps:=10 S.ht:=B.ht