编译原理课件语法制导翻译__SDD_例__生成抽象语法树

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


T . node num
T . node id
+






id num
4

id
to entry for C
to entry for a
YTU COMPILER
P5 P3 — P1
+ •


P4

id

id

P2 num
4
to Baidu Nhomakorabeantry for c
to entry for a
建立抽象语法树的SDD
产生式 EE1 + T EE1 - T ET T ( E ) Tid Tnum 语义规则 E.node := new Node(‘+’,E1.node, T.node) E.node := new Node(‘-’, E1.node, T.node) E.node := T.node T.node := E.node T.node := new Leaf(id, id.entry) T.node := new Leaf (num, num.lexval)
构造抽象语法树
Abstract Syntax Trees
YTU COMPILER
Abstract Syntax Trees
• 在抽象语法树中, 操作符 和 关键字 都不作为叶 结点出现,而是把它们作为内部结点
S if B then S1 else S2 if-then-else B S1 S2 if B S then S1 else S2
建立表达式的抽象语法树
• 抽象语法树中的每一个结点可以由包含几个域 的记录来实现的。
运算符号 (结点标号)
运算分量的指针
+
id
num 5
标识符在符号表中的入口
YTU COMPILER
用对象来表示表达式的抽象语法树中的结点
(1) Node(op, left, right) 运算符号结点, 标号是op, 两个域left和right分别指向左子树和右子树. (2) Leaf(id, entry) 标识符结点, 标号为id, 一个域entry指向标识符在符号表中的入口。 (3) Leaf(num, val) 数结点, 标号为num, 一个域val用于存放数的值。
Syntax Tree 抽象语法树
Parse Tree 语法分析树
YTU COMPILER
a := b* -c + b * -c
:= a * b @ c b + * @ c 赋值语句
E
a
:= E E * E
E + E E * E
b
@
E
c
b
@
E
c
Syntax Tree
Parse Tree
YTU COMPILER
Figure 5.10: Constructing syntax trees for simple expressions
YTU COMPILER
a – 4 + c 的抽象语法树的构造 表 ☆ 虚线: 带注释的语法分析树 实线: 抽象语法树 (真正存在)
E .node
E .node E .node T .node id -
YTU COMPILER
建立表达式a-4+c 的抽象语法树 (1 )P1 := new Leaf(id, entrya); (2) P2 := new Leaf(num, 4); (3) P3 := new Node(‘-’, P1,P2); (4) P4 := new Leaf(id,entryc); (5) P5 := new Node(‘+’, P3,P4);
相关文档
最新文档