编译原理第二版6.5答案

6.5 节的练习

6.5.1

假定图 6-26 中的函数 widen 可以处理图 6-25a 的层次结构中的所有类型,翻译下列表达式。假定 c 和 d 是字符类型,s 和 t 是短整型, i 和 j 为整型, x 是浮点型。

  1. x = s + c
  2. i = s + c
  3. x = (s + c) * (t + d)
解答
  1. x = s + c

     t1 = (int) s
     t2 = (int) c
     t3 = t1 + t2
     x = (float) t3
    
  2. i = s + c

     t1 = (int) s
     t2 = (int) c
     i = t1 + t2
    
  3. x = (s + c) * (t + d)

     t1 = (int) s
     t2 = (int) c
     t3 = t1 + t2
     t4 = (int) t
     t5 = (int) d
     t6 = t4 + t5
     t7 = t3 + t6
     x = (float) t7
    

6.5.2

像 Ada 中那样,我们假设每个表达式必须具有唯一的类型,但是我们根据一个子表达式本身只能推导出一个可能类型的集合。也就是说,将函数 E1 应用于参数 E2(文法产生式为 E -> E1(E2))有如下规则:

E.type = {t | 对 E2.type 中的某个 s, s -> t 在 E1.type 中}

描述一个可以确定每个字表达式的唯一类型的 SDD。它首先使用属性 type,按照自底向上的方式综合得到一个可能类型的集合。在确定了整个表达式的唯一类型之后,自顶向下地确定属性 unique 的值,整个属性表示各子表达式的类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值