语法制导翻译
来源:龙书(厚),南大课后作业
p198 5.1.2
注:对以n为结尾标记的表达式求值
Answer
E,T:表达式(也可看做一个数)
E’:后+一个表达式
T’:后*一个表达式
F:因子,可以是一个数或一个带括号式子
产生式 | 语法规则 | |
---|---|---|
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 |
知识点
- SDD
p202 5.2.2
对于图 5-8 中的 SDD,给出下列表达式对应的注释语法分析树:
- int a, b , c
Answer
参考龙书p202
注释语法分析树:
注释语法分析树的依赖图:
知识点
- 注释语法分析树与依赖图
p216 5.4.3
Answer
提取左公因子
B -> B1 A {B.val = 2 * B1.val + A.val}
| 1 {B.val = 1}
A -> 0 {A.val = 0}
| 1 {A.val = 1}
消除左递归后得
B -> 1 {C.i = 1} C{B.val=C.val}
C -> A {C1.i = 2 * C.i + A.val} C1 {C.val = C1.val}
| ε {C.val = C.i}
A -> 0 {A.val = 0}
| 1 {A.val = 1}
val为综合属性,i为继承属性