收藏 分享(赏)

第五章语法制导翻译.ppt

上传人:j35w19 文档编号:4783215 上传时间:2019-01-12 格式:PPT 页数:99 大小:749KB
下载 相关 举报
第五章语法制导翻译.ppt_第1页
第1页 / 共99页
第五章语法制导翻译.ppt_第2页
第2页 / 共99页
第五章语法制导翻译.ppt_第3页
第3页 / 共99页
第五章语法制导翻译.ppt_第4页
第4页 / 共99页
第五章语法制导翻译.ppt_第5页
第5页 / 共99页
点击查看更多>>
资源描述

1、单击此处编辑母版标题样式单击此处编辑母版副标题样式* 1语法制导翻译 ?为什么进行词法和语法分析 ?用 A 进行归约表达的是什么意思 看: operand+term EE 1+T E1的值 +T的值的结果作为 E的值 即:取来 E1的值和 T的值做加法运算,结果作为 E的值 E.val=E1.val+T.val第五章第五章 语法制导翻译语法制导翻译n 翻译的任务n 首先是语义分析和正确性检查,若正确,则翻译成中间代码或目标代码。n 基本思想n 根据翻译的需要设置文法符号的属性,以描述语法结构的语义。n 例如,一个变量的属性有类型,层次,存储地址等。表达式的属性有类型,值等。n 属性值的计算和产

2、生式相联系。随着语法分析的进行,执行属性值的计算,完成语义分析和翻译的任务。5.1 语法制导翻译概述n 语法制导翻译的概念描述n 在进行语法分析的同时,完成相应的语义处理n EE 1 + E2 E.val:=E1.val+E2.valn 语法结构具有规定的语义n 问题:如何根据被识别出的语法成分进行语义处理?1. 语义分析的任务n 语义检查n 例:类型、运算、维数、越界n 语义处理n 例:变量的存储分配n 例:表达式的求值n 例:语句的翻译(中间代码的生成)n 总目标:生成等价的中间代码2. 代码结构n 计算学科:对信息(数据表示)描述和变换算法的系统研究n 变换:源、目标以及源与目标的对应关

3、系n 语句的代码结构n 语句分类:n 说明语句 符号表的查填n 可执行语句 指令代码3. 典型处理方法n 对应每一个产生式编制一个语义子程序,当一个产生式获得匹配时,调用相应的语义子程序实现语义检查与翻译n EE 1 + T E.val:=E1.val+T.valn TT 1 * F T.val:=T1.val*F.valn F id F.val:=id.valn 适宜在完成归约的时候进行3. 典型处理方法n 在产生式的右部的适当位置,插入相应的语义动作,按照分析的进程,执行遇到的语义动作n D T L.in := T.type Ln T int T.type := integer n T r

4、eal T.type := real n L L 1.in := L.in L1,idn 语义 可以看成是相应文法符号的属性n 适宜在进行推导时完成语义翻译的流程输入符号串分析树依赖图语义规则的计算实际上,编译中语义翻译的实现并不是按图中的流程处理的;而是随语法分析的进展,识别出一个语法结构,就对它的语义进行分析和翻译。 语法制导定义是对上下文无关文法的推广每个 文法 符号都有一个相关的属性集。综合属性 :通过分析树中其子节点的属性值计算出来;继承属性 :由该节点的兄弟节点及父节点的属性值计算出来; 依赖图语义规则 建立了属性之间的依赖关系,这些关系可以用图来表示,这样的图称为 依赖图。 属性

5、5.1 语法制导定义 (Syntax-directed definitions)在一个 语法制导定义 中, A P都有与之相关联的一套语义规则,规则形式为b: = f( c1, c2, , ck),f是一个函数,而且或者 1 b是 A的一个综合属性并且 c1, c2, , ck是 中的 符号的属性,或者 2 b是 中的 符号的一个继承属性并且 c1,c2, , ck是 A或 中的 任何文法符号的属性。 在两种情况下,都说属性 b依赖于属性 c1, c2, , ck。5.1.1 语法制导定义的形式例 5.1 台式计算器程序的语法制导定义(图 5 2)产生式 语义规则LEn print(Eval)

6、(可看作是 L的虚属性 )E E1+T E val := E1 val+T valE T E val := T valT T1*F T val := T1 val*F valT F T val := F valF (E) F val := E valF digit F val := digitlexvalp S-属性定义仅仅使用综合属性的 语法制导定义 。结点属性值的计算正好和自底向上分析建立分析树结点同步进行。p 例 5 .2 输入: 3*5+4n5.1.2 综合属性digitlexval:=3Fval:=3Tval:=3digitlexval:=5Fval:=5Tval:=15*Eval:

7、=15 +digitlexval:=4Fval:=4Tval:=4Eval:=19Ln 综合属性值的计算方法对于 s-属性定义,通常使用自底向上的分析方法,在建立每一个结点处使用语义规则来计算综合属性值,即在用哪个产生式进行归约后,就执行那个产生式的 s-属性定义计算属性的值,从叶结点到根结点进行计算。 5.1.3 继承属性继承属性 值是由此结点的父结点和或兄弟结点的某些属性值来决定的。例 5 . 3 变量说明的属性定义int a,b,c表 5.2 带有继承属性 L.in的语法制导定义产生式 语义规则DTL Lin:=T typeT int T type :=integerT real T t

8、ype :=realL L1,id L1 in :=L in addtype(id entry,L in)L id addtype(id entry,L in)T LL id3L id2Did1real ,1 entry2 entry3 entry4type in 5 6in 7 8in 9 10依赖图的构造方法for 分析树中的每个结点 n do for 与结点 n对应的文法符号的每个属性 a do 在依赖图中为 a构造一个结点; for 分析树的每个结点 n do for 结点 n所用产生式对应的每条语义规则 b: f( c1, c2, , ck ) do for i:=1 to k do

9、 从结点 ci到结点 b构造一条有向边;5.1.4 依赖图 _获得语义规则的计算顺序 例 5-5 图 5 5分析树的依赖图 拓扑排序一个无环有向图的拓扑排序是图中结点的任何顺序 m1, m2, , mk,使得边必须是从序列中前面的结点指向后面的结点,也就是说,如果 mim j是 mi到 mj的一条边 ,那么在 序列中 mi必须出现在 mj的前面。若依赖图中无环,则存在一个拓扑排序,它就是属性值的计算顺序。5.1.5 计算顺序 1, 2, 3, 4, 5, 6, 7, 8, 9, 10a4:=real;a5:=a4;addtype(id3entry,a5);a7:=a5;addtype(id2e

10、ntry,a7);a9:=a7;addtype(id1entry,a9);例 5 . 6 图 5 . 7的拓扑排序是:分析树法 : 输入串 分析树 依赖图 计算次序基于规则的方法 : 在构造编译器时,用手工或专门的工具来分析语义规则 ,确定属性值的计算顺序。忽略语义规则的方法 :在分析过程中翻译,那么计算顺序由分析方法来确定而表面上与语义规则无关。这种方法限制了能被实现的语法制导定义的种类。后两种方法不必显式构造依赖图,因此时空效率更高。计算语义规则的方法 抽象语法 ( abstract syntax)从具体语法中 抽象出 语言结构的本质性的东西,而不考虑语言的具体符号表示,从而可简化语义的形

11、式描述。在不同的语言中赋值语句有不同的写法: x=y; x:=y; yx 等等,可以用抽象形式 assignment(variable,expression)把前面各种具体形式统一起来。5.2 语法树( syntax tree)的构造 表示程序层次结构的树,它把分析树中对语义无关紧要的成分去掉,是分析树的抽象形式 ,也称作语法结构树,或结构树。语法树是常用的一种中间表示形式。把 语法 分析和翻译分开。 语法 分析过程中完成翻译有许多优点,但也有一些不足:1.适于语法分析的文法可能不完全反映语言成分的自然层次结构;2. 由于语法分析方法的限制,对分析树结点的访问顺序和翻译需要的访问顺序不一致。语

12、法树产生式 sif B then S1 else S2 的语法树if-then-else | B S1 S2 赋值语句 的语法树assignmentvariable expression在语法树中,运算符号和关键字都不在叶结点,而是在内部结点中出现。5.2.1 语法树构造表达式的语法树使用的函数1. mknode(op,left,right) 建立一个标记为 op的运算符结点,两个域 left和 right是指向左右运算对象的指针。 2 mkleaf(id,entry) 建立一个标记为 id的标识符结点 ,其域 entry是指向该标识符在符号表中相应表项的指针。 3. mkleaf(num,v

13、al) 建立一个标记为 num的数结点,域 val用于保存该数的值。返回指向新建立结点的指针。5.2.2 构造表达式的语法树 idto entry anum 4 idto entry c+图 5-8 a-4+c的 语法树5.2.3 构造语法树的语法制导定义 产生式 语义规则EE1+T E.nptr:=mknode(+,E1.nptr,T.nptr)E E1-T E.nptr:=mknode(-,E1.nptr,T.nptr)E T E.nptr:=T.nptrT (E) T.nptr:=E.nptrT id T.nptr:=mkleaf(id,id.entry)T num T.nptr:=mkleaf(num,num.val)图 5-10 a-4+c的 语法树的构造 无环有向图( Directed Acyclic Graph,简称 dag)用途:提取表达式中的公共子表达式,以取得目标程序的局部优化。方法:执行 mknode和 mkleaf时,检查是否已有相同的结点,若有,则返回相应结点的指针。5.2.4 表达式的无环有向图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 语法

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报