编译原理语法制导翻译翻译方案SDT

合集下载

06第6章 语法制导翻译技术PPT课件

06第6章 语法制导翻译技术PPT课件

② E→T
③ T→T*F ⑦ F→b
③ T→T*F@*
④ T→F
⑧ F→c
④ T→F
⑤ F→(E) ⑥ F→a@a ⑦ F→b@b ⑧ F→c@c
➢把中缀表达式文法叫做输入文法;
➢在输入文法上添加动作后形成的文法叫做翻译文法
➢使用中缀表达式文法推导得到终结符号串叫做输入序列;
➢使用翻译文法推导得到的符号串称为活动序列。
E→TE’ E’ →+T@+E’|ε T→FT’
-用T1表示T’
T’ →*F @* T’|ε
T1 ()
F→(E)|a@a| b@b| c@c
{if(ch==‘*’)
{ ch = getnextsymbol();
F ();OUT(“*”); T1 ();
}
else if(ch∈FOLLOW(E’))return;
2020/7/29
#
19
6.5 属性翻译文法
▪ 属性:指与文法符号的类型和值等有关的一些语义信 息,在编译中用属性描述被处理对象的语义特征。
▪ 属性代表与文法符号相关的语义信息。
▪ 属性的设置和语法结构的语义以及翻译程序的需要有
关。例如:
注:教材中用箭头↑和 ↓代替.
➢ 文法符号X的类型属性:X.type
第6章 语法制导翻译技术
2020/7/29
1
标题添加
点击此处输入相 关文本内容
标题添加
点击此处输入相 关文本内容
总体概述
点击此处输入 相关文本内容
点击此处输入 相关文本内容
2
内容提要
➢ 引言 ➢ 翻译文法 ➢ 语法制导翻译 ➢ 自顶向下语法制导翻译 ➢ 属性翻译文法 ➢ 属性文法的自顶向下翻译 ➢ 自底向上语法制导翻译

编译原理课件语法制导翻译__SDD_定义__例__表达式的解释执行

编译原理课件语法制导翻译__SDD_定义__例__表达式的解释执行
表达式的解释执行
产 生 式 LEn E E1 + T ET T T1 * F TF F (E) F digit
digit+digit*digit n
L E E T F digit +
18+5*2n
n T
T * F F digit digit
语法制导定义 SDD Syntax-Directed Definition
F.val := digit.lexval
E .val = 8
T.val = 8 F.val = 8
+
T .val = 10 T .val = 5 *
F.val = 5 F .val = 2 digit .lexval = 2
digit .lexval = 8
digit .lexval = 5
SDD与属性文法
• 副作用 • 引用透明
LEn
print (E.val)
E E1 + T E.val := E1 .val + T.val
ET
T T1 * F TF
E.val := T.val
T.val := T1.val * F.val T.val := F.val
F (E)
F digit
F.val := E.val
TF
F(E) Fdigit
翻译输入 3*5+4n 所作的动作
L E n { print (statck[top-1].val ); top = top -1; } EE1 + T { statck[top-2].val = statck[top-2].val + statck[top].val; top = top -2; } TT1 * F { statck[top-2].val = statck[top-2].val * statck[top].val; top = top -2; } { statck[top-2].val = F(E) statck[top-1].val top = top -2; }

编译第七章语法制导翻译

编译第七章语法制导翻译

16
第一节 概述
-------树形表示法
-------三元式
-------四元式:最常用的形式
精选PPT
第七章中间代码的生成 1 2
第一节 概述
❖ 二、翻译方法
1、语法制导翻译

----在语法分析的基础上进行边分析边翻译。
●注:1)语法制导翻译时会根据文法产生式右部符 号串的含义进行翻译,翻译的结果是生成相应中间 代码。
精选PPT
15
第一节 概述
❖ 四、常见的中间代码形式 ❖ 2.三元式 ❖ (Operator,Operand1, Operand2) ❖ 注:1)这里三元式本身作为存放结果的单元。
2)为了在其它三元式中利用当前三元式的结果, 需要对三元式进行遍号。三元式的编号就作为相应 三元式的结果值。
精选PPT
第七章语法制导翻 译和中间代码生成
精选PPT
1
第一节 概述
❖ 语法分析之后,编译的任务是由已识别为正确的源程 序生成一组规格一致,便于计算机加工的指令形式。
一、中间代码生成方法
语法制导翻译,属性文法制导翻译
二、中间代码
●中间代码:不是机器语言,便于生成机器语言,便于代 码优化。
●中间代码的形式:
-------逆波兰式
S3
S2
r4
r4
S3
S2
S3
S2
S4
S5
r1(S4) S5(r1)
r1(S4) r2(S5)
r3
r3
精选PPT
)#
acc
r4 r4
S9 r1 r1 r2 r2 r3 r3
GOTO S 1 6 7 8
13
步骤 状态

编译原理 第5章语法制导的翻译

编译原理 第5章语法制导的翻译

属性和文法符号相关联 规则和产生式相关联

根据需要,将文法符号和某些属性相关联, 并通过语义规则来描述如何计算属性的值


E→E1+T E.code=E1.code || T.code || ‘+’ code表示了我们关心的表达式的逆波兰表示,规则说明 加法表达式的逆波兰表示由两个分量的逆波兰表示并置, 然后加上‘+’得到。
digitlexval=3
18
适用于自顶向下分析的SDD


前面的表达式文法存在直接左递归,因 此无法直接用自顶向下方法处理。 消除左递归之后,无法直接使用属性val 进行处理:


比如规则:T→FT’ T’→*FT’ T对应的项中,第一个因子对应于F, 而运算符在T’中。
19
相同表达式的不同文法的比较
38
例5.15 分析栈实现的例子

假设语法分析栈存放在一个被称为stack 的记录数组中,下标top指向栈顶;


stack[top]指向这个栈的栈顶;stack[top-1] 指向栈顶下一个位置; 如果不同的文法符号有不同的属性集合,我 们可以使用union来保存这些属性值。(归 约时,我们知道栈顶向下的各个符号分别是 什么)
语义翻译的流程
输 入 符 号 串 分 析 树 依 赖 图




的 计
实际上,编译中语义翻译的实现并不是 按图中的流程处理的;而是随语法分析 的进展,识别出一个语法结构,就对它 的语义进行分析和翻译。

9
5.1 语法制导定义

4.什么是语法制导定义(SDD) 上下文无关文法和属性/规则的结合;

属性文法和语法制导翻译

属性文法和语法制导翻译


赋值语句的语法树
assignment variable expression

在语法树中,运算符号和关键字都不在叶结 点,而是在内部结点中出现。
《编译技术》课程 北京大学信息科学技术学院
2015年春季学期
5
具体语法树 vs. 抽象语法树
if (x+y) { while (z) z=z+1 od; x =8 } else z = 7 fi $ 的具体语法树 (分析树)
北京大学信息科学技术学院 2015年春季学期 《编译技术》
第5章 语法制导翻译(2)
Syntax-Directed Translation 【第5.3, 5.4节】
回顾:语法制导定义(SDD)

为每个符号X添加相应的属性X.x,对于产生 式A->XYZ

综合属性:A.a = f (A.i, X.x, Y.y, Z.z) 继承属性:Y.i = g (A.a, X.x, Y.y, Z.z)
2015年春季学期
《编译技术》课程
北京大学信息科学技术学院
26
top
state ... X Y Z
val ... X.x Y.y Z.z
state
val ... A.a
top
... A
定义 A.a=f(X.x, Y.y, Z.z)(抽象表示)对应的动作 stack[top-2].val = f(stack[top-2].val, stack[top-1].val, stack[top].val); top = top-2;

把语义动作看成终结符号,输入 9-5+2, 其分析树见 下页,当按深度优先遍历它,执行遍历中访问的语 义动作,将输出

编译原理课件语法制导翻译__翻译方案_SDD

编译原理课件语法制导翻译__翻译方案_SDD
语法制导翻译
描述一棵语法树中结点的属性之间的 相互依赖关系 词法分析 语法分析 依赖图 输入串 语法树 语义规则计算次序 ( 拓扑排序) 树遍历
一遍扫描:在语法分析的同时完成语义规则的 计算, 无需构造实际的语法树
1. 依赖图的拓扑排序
• 依赖图 • 拓扑排序
2. 树遍历的属性计算方法
练习: 以下SDD是L-属性的吗?
产生式 语义规则
ALM
AQR
L.i := l(A.i) M.i := m(L.s) A.s := f(M.s) R.i := r(A.i) Q.i := q(R.s) A.s := f(Q.s)
• 表达式2 ☆
dependencygraph edges can go from left to right
(2) 产生式 Xj 的左边符号 X1,X2,…,Xj-l 的属性
(3) Xj 自己的属性
• S-属性文法一定是L-属性文法 表达式 ☆
Example 非L-属性文法
产生式 A BC 语义规则 A.s = B.b B.i = f ( C.c , A.s )
Fig. Syntax-directed definition of a simple desk calculator
L-属性文法 D TL 和自上而下 T int 语法分析 T real
L L1, id D T .type = real real
综T.type T. type := integer T. type := real L1.in := L.in; addtype (id.entry,L.in ) addtype (id.entry,L.in )
(a)初始状态 (b)VisitNode(S)第一次调用后 (c)VisitNode(S)第二次调用后 (d)VisitNode(S)第三次调用后 的最终状态

编译原理--语法制导的翻译 ppt课件

编译原理--语法制导的翻译 ppt课件

(2)设code 为综合属性,代表各非终结符 的代码属性
type为综合属性,代表各非终结符的类型属 性
inttoreal把整型值转换为相等的实型值 vtochar将数值转换为字符串
5.3.3 给出一个SDD对x*(3*x+x*x)这样的表达式求 微分。表达式中涉及运算符+和*,变量x和常 量。假设不进行任何简化,也就是说,比如 3*x将被翻译为3*1+0*x。
ST z , R4
8.2.6 确定下列指令序列的代价。
1)
LD R0 , y
2
LD R1 , z
2
ADD R0 , R0 , R1 1
ST x , R0
2
总代价:7
3)
LD R0 , c
2
LD R1 , i
2
MUL R1 , R2 , 8 2
ST a(R1) , R0 2
总代价:8
8.3.3 假设使用栈式分配,且假设a和b都是元素大小为4字节 的数组,为下面的三地址语句生成代码。
的位数次幂值(2 length of L)
S L1.L2 S.val = L1.val +L2.val / L2.b; S L S.val = L.val; L L1 B L.val = L1.val *2 + B.val;
L.b = L1.b*2; L B L.val = B.val; L.b = 2; B 0 B.val = 0; B 1 B.val = 1;
2)三个语句序列 x = a[i] y = b[i] z = x*y
LD R1 , i MUL R1 , R1 , 4 ADD R1 , R1 , SP LD R2 , a(R1) ST x(SP) , R2 LD R3 , i MUL R3 , R3 , 4 ADD R3 , R3 , SP LD R4 , b(R3) ST y(SP) , R4 LD R5 , x(SP) LD R6 , y(SP) MUL R5 , R5 , R6 ST z(SP) ,R5

语法制导的翻译

语法制导的翻译
• 属性文法没有副作用,但增加了描述的复杂度
– 比如语法分析时如果没有副作用,标识符表就必须
作为属性传递 – 可以把标识符表作为全局变量,然后通过副作用函 数来添加新标识符
• 受控的副作用
– 不会对属性求值产生约束,即可以按照任何拓扑顺
序求值,不会影响最终结果 – 或者对求值过程添加简单的约束
受控副作用的例子
计算s的综合属型a可以放在最前面将sdd转换为sdt对于产生式体中的终结符号读入符号并获取其经词法分析得到的综合属性对于非终结符号使用适当的方式调用相应函数并记录返回值l属性的sdd的实现递归下降法实现l属性sdd的例子比如code代码可能是一个上百k的串对其进行并置等运算会比较低效可以逐步生成属性的各个部分并增量式添加到最终的属性值中在各产生式中主属性是通过产生式体中各个非终结符号的主属性连接并置得到的同时还会连接一些其它的元素各非终结符号的主属性的连接顺序和它在产生式体中的顺序相同边扫描边生成属性1只需要在适当的时候发出非主属性的元素即把这些元素拼接到适当的地方假设我们在扫描一个非终结符号对应的语法结构时调用相应的函数并生成主属性l1ccodelabel如果各个函数把主属性打印出来我们处理while语句时只需要先打印labell1再调用c打印了c的代码再打印labell2再调用s打印s对于这个规则而言只需要打印labell1和labell2当然我们要求c和s的语句在相应情况下跳转到l1和l2边扫描边生成属性2l1new
上的非终结符号A的属性值由N对应的产生式所关联的 语义规则来定义
– 通过N的子结点或N本身的属性值来定义
• 继承属性(inherited attribute):结点N的属性值由N
的父结点所关联的语义规则来定义
– 依赖于N的父结点、N本身和N的兄弟结点上的属性值
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档