【编译原理】语法制导的语义计算
语法制导的语义计算
向上综合 向下继承
向上综合
习题来自课本P189,190 T2 T3 T4 P162 例7.2
语法制导定义的两类属性:
- 综合属性:节点处的综合属性的值是根据解析树中该节点的子节点处的属性值计算的
- 继承属性:继承属性的值是根据该节点的兄弟节点和父节点的属性值计算的。
SDD两种类型:
- S属性定义:如果一个SDD的每个属性都是综合属性,那它就是S属性的。
- L属性定义:在一个产生式体所关联的各个属性之间,依赖图的边总是从左到右,而不能从右到左
1.出G[S]的一个属性文法,且注释分析树已经画好。补全注释分析树即可:
| S →( L ) | {S.num := L.num + 1;} |
|---|---|
| S → a | {S.num := 0;} |
| L → L₁, S | {L.num := L₁.num + S.num;} |
| L → S | {L.num := S.num} |
2.给出G[S]的一个属性文法,且注释分析树已经画好。请画出3 * (5 + 4)的注释分析树:
| S→E | {print(E.val)} |
|---|---|
| E → E₁ + T | {E.val := E₁.val + T.val} |
| E → T | {E.val := T.val} |
| T → T₁ * F | {T.val := T₁.val * F.val} |
| T → F | {T.val := F.val} |
| F → (E) | {F.val := E.val} |
| F → d | {F.val := d.lexval} |
3.向上综合+向下继承
给出G[S]的一个属性文法,且注释分析树已经画好。请画出3 + 4 - 5的注释分析树:
| E → TR | {R.in := T.val; E.val := R.val} |
|---|---|
| R → +TR₁ | {R₁.in := R.in + T.val; R.val := R₁.val} |
| R → -TR₁ | {R₁.in := R.in - T.val; R.val := R₁.val} |
| R → ε | {R.val := R.in} |
| T → num | {T.val := lexval(num)} |
4.对于语言L = {aⁿbⁿcⁿ | n>=1},根据如下的语义计算模型,验证aaabbbccc是否被接受:
| S → ABC | {B.in := A.n; C.in := A.n; if(B.n = 0 and C.n = 0) then print(“Accept”) else print(“Refused”)} |
|---|---|
| A → A₁a | {A.n := A₁.n + 1} |
| A → a | {A.n := 1} |
| B → B₁b | {B₁.in := B.in; B.n := B₁.n - 1} |
| B → b | {B.n := B.in - 1} |
| C → C₁c | {C₁.in := C.in; C.n := C₁.n - 1} |
| C → c | C.n := C.in - 1} |
习题讲解
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
