Compilers Principles, Techniques, & Tools (purple dragon book) second edition exercise answers

5.1 节的练习

5.1.1

对于图 5-1 中的 SDD,给出下列表达式对应的注释语法分析树

  1. (3+4)*(5+6)n
  2. 1*2*3*(4+5)n
  3. (9+8*(7+6)+5)*4n

解答

  1. (3+4)*(5+6)n

    5 1 1-1

  2. 1*2*3*(4+5)n

    5 1 1-2

5.1.2

扩展图 5-4 中的 SDD,使它可以像图 5-1 所示的那样处理表达式

解答

产生式 语法规则
1) L -> En L.val = E.val
2) E -> TE' E'.inh = T.val
E.val = E'.syn
3) E' -> +TE_1' E_1'.inh = E'.inh + T.val
E'.syn = E_1'.syn
4) E' -> ε E'.syn = E'.inh
5) T -> FT' T'.inh = F.val
T.val = T'.syn
6) T' -> *FT_1' T_1'.inh = T'.inh * F.val
T'.syn = T_1'.syn
7) T' -> ε T'.syn = T'.inh
8) F -> (E) F.val = E.val
9) F -> digit F.val = digit.lexval

5.1.3

使用你在练习 5.1.2 中得到的 SDD,重复练习 5.1.1

解答

  1. (3+4)*(5+6)n

    5 1 3-1

  1. 1*2*3*(4+5)n

    5 1 3-2