文档详情

编译原理_第5章_第1节_语法制导翻译及中间代码生成.ppt

发布:2017-05-29约6.87千字共34页下载文档
文本预览下载声明
5.2.2 三元式表示法 例1:A∨B∧x≠y+1∨(x≥0∨B)∧D (1) (+, y, 1) (2) (≠, x, (1)) (3) (∧, B, (2)) (4) (∨, A, (3)) (5) (≥, x, 0) (6) (∨, (5), B) (7) (∧, (6), D) (8) (∨, (4), (7)) 5.2.2 三元式表示法 例2:x=a*b+c/d (1) (*, a, b) (2) (/, c, d) (3) (+, (1), (2)) (4) (=, x, (3)) 5.2.3 四元式表示法 (OP, Arg1, Arg2, Result) 运算符 运算量 运算结果 5.2.3 四元式表示法 A=-B*(C+D) 序号 OP ARG1 ARG2 Result 注释 1 @ B — T1 T1临时变量 2 + C D T2 T2临时变量 3 * T1 T2 T3 T3临时变量 4 = T3 — A 赋值运算 (1) 单目运算符,一律使用ARG1。 (2) 临时变量:a.与用户自定义变量名一样看待; b.用某种整数编码代替。 I will greet this lecture with love in my heart. 主讲人:韩士元 Email: shiyuanhan@126.com Tel: +86 5.1 概述 任务: 词法分析和语法分析的基础上,进一步分析其含义,为生成相应的目标代码做好准备或直接生成目标代码 功能: (1)审查每个语法结构的静态语义,即验证语法结构合法的程序是否真正有意义(静态语义分析或静态审查) (2)如果静态语义正确,就执行真正的翻译,即要么生成中间代码(便于优化),要么生成实际的目标代码 语义分析及其功能 5.1 概述 类型检查:每个操作是否遵循语言的类型系统 控制流检查:控制流语句必须使控制转移到合法的地方 一致性检查:在很多场合要求对象只能被定义一次,如枚举类型 相关名字检查:同一名字必须出现两次或多次 名字的作用域分析 静态语义检查 5.1 概述 复杂性介于源程序语言和机器语言的一种表示形式 引入原因: 快速编译程序直接生成目标代码,没有将中间代码翻译成目标代码的额外开销。 使编译程序结构在逻辑上更为简单明确, 将与机器相关的某些实现细节置于代码生成阶段仔细处 在中间代码一级进行优化工作使得代码优化比较容易实现。 中间代码 5.1.1 翻译文法(TG) 逆波兰表示法:一种把运算符写在运算量后面的表达式表示方法。 a+b ab+ a+b*c abc*+ (a+b)*c ab+c* a+b*c#的处理过程: Read(a) Print(a) a Read(+) Read(b) Print(b) ab Read(*) Read(c) Print(c) abc Print(*) abc* Print(+) abc*+ a@a+b@b*c@c@*@+ Read(#) 原文法: 1. E?E+T 2. E?T 3. T?T*F 4. T?F 5. F?(E) 6. F?a 7. F?b 8. F?c 增加动作描述后文法: 1. E?E+T@+ 2. E?T 3. T?T*F@* 4. T?F 5. F?(E) 6. F?a@a 7. F?b@b 8. F?c@c E?T?T*F?F*F?(E)*F?(E+T)*F?(a+b)*c E?T?T*F@*?T*c@c@*?F*c@c@*?(E)*c@c@*?(E+T@+)*c@c@* ?(E+F@+)*c@c@*?(E+b@b@+)*c@c@* ?(a@a+b@b@+)*c@c@* 产生式右部的动作描述 5.1.1 翻译文法(TG) 5.1.1 翻译文法(TG) 翻译文法是一个上下文无关文法,在该文法中终极符号集由输入符号(即原来终极符)和动作符号组成。 GT=(VN, VT, P, E) VN={E, T, F} VT={a, b, c, +, *, (, ), @a, @b, @c, @+, @*} P={产生式} 5.1.2 属性翻译文法 扩充翻译文法的概念,使非终极符号、终极符号、动作符号都包含属性值。 这些属性代表与文法符号相关的信息,例如,文法符号的类型、值、符号表内容等。 与这些属性相关的信息,称为值属性。 值属性可以在语法分析过程中计算和传递,属性加工的过程即语义的处理过程 (c↑3+c↑9)*(c↑2+c↑41) 2. E?E+T 3. E?T 4. T?T*F 5. T?F 6. F?(E) 7. F?c 1. S?E@Answer (c↑3+c↑9)*(c↑2+c↑41) @Answer↓516 S E @Answer T T * F F ( E )
显示全部
相似文档