语法制导翻译和中间代码(8学时)

语法制导翻译和中间代码(8学时)

ID:39707177

大小:568.00 KB

页数:41页

时间:2019-07-09

语法制导翻译和中间代码(8学时)_第1页
语法制导翻译和中间代码(8学时)_第2页
语法制导翻译和中间代码(8学时)_第3页
语法制导翻译和中间代码(8学时)_第4页
语法制导翻译和中间代码(8学时)_第5页
资源描述:

《语法制导翻译和中间代码(8学时)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第8章语法制导翻译和中间代码属性文法语法制导翻译中间代码的形式逆波兰式、三元式、树形表示、四元式一些语句的翻译赋值语句布尔表达式控制语句中的布尔表达式For循环语句8.1属性文法预备知识源程序与目标程序,语法结构完全不同,但语义相同,所以表达的结果完全相同。语义分析的2种处理方法:1)语法分析之后,直接调用相应的“语义子程序”进行语义处理2)语法分析之后,先生成“语法树”或其他形式,再进行语义处理语义分析的处理结果:1)目标代码2)中间代码:复杂性介于源程序语言和机器语言之间静态语义分析:审查语法结构的静态语义

2、确定标识符的数据类型类型检查和转换:检查运算对象的数据类型是否合法,必要时进行类型转换一致性检查:一个对象只能被声明一次作用域检查控制流检查:控制语句转到合法的地方继续执行翻译(若静态语义分析正确后才翻译)语义处理的任务和功能常用的语义分析方法——语法制导翻译语法制导翻译:首先,使用属性文法为工具,描述程序设计语言的语义规则。在语法分析时,每应用一个产生式(推导或归约),同时完成该产生式上所附的语义规则描述的动作,从而完成语义处理。语义分析的方法用于描述语义规则的文法。对文法的每个符号引入一些属性,这些属性代表

3、与文法符号相关的信息,例如:类型、值、代码序列、符号表内容等。属性值可以在语法分析过程中进行计算和传递。属性的加工过程就是语义的处理过程。属性文法(attributegrammar)属性文法的组成:一个上下文无关文法一系列语义规则(附在文法的每个产生式上)属性文法的形式:三元组A=(G,V,F)G:是一个上下文无关文法V:有穷属性集,每个属性与文法的一个终结符或非终结符关联F:关于属性的断言或谓词集.每个断言与一个产生式关联.而此断言只引用该产生式的终结符或非终结符相关联的属性属性文法(attributegra

4、mmar)属性文法举例例1说明语句中各种变量的类型信息的语义规则:产生式语义规则DTLTcharTintTfloatLL1,idLid{L.in:=T.type}{T.type:=char}{T.type:=int}{T.type:=float}{L1.in:=L.inaddtype(id.entry,L.in)}{addtype(id.entry,L.in)}属性文法举例例2表达式类型检查和求值的语义规则:假设:类型不同的两个变量进行运算则语义错误。产生式语义规则LEEE1+TETTT1*

5、FTFF(E)Fid{print(E.val);}{if(E1.type==T.type){E.type:=E1.type;E.val:=E1.val+T.val;}elseerror();}{E.type:=T.type;E.val:=T.val}{getType(F.type,id.entry);F.val:=id.lexval;}语法制导翻译的实质:根据每个产生式所对应的语义规则,随语法分析的每一步(推导或归约),执行相应的语义动作。语法制导翻译的过程:对单词符号串进行语法分析,构造语法分析树;然后

6、根据需要构造属性依赖图,遍历语法树,并在语法树的各结点处按语义规则进行计算。8.2语法制导翻译概论使用“依赖图”,从依赖图的拓扑排序中得到计算语义规则的顺序,再依照顺序对输入串进行语义分析。依赖图一个有向图,用于描述分析树中的属性和属性之间的相互依赖关系。构造依赖图举例:参见P172图8.4属性计算方法树遍历:事先建立语法树,(深度优先)遍历直至计算出所有属性值。一遍扫描:在语法分析的同时计算属性值。计算语义规则属性:综合属性:可以在分析输入串的同时,自下而上地来计算。如:val继承属性:一个结点的继承属性值是

7、由此结点的父结点和(或)兄弟结点的某些属性来决定的。如:L.in属性文法:S-属性文法:L-属性文法的一个特例L-属性文法:例1就是一个L-属性文法属性文法的计算:可以是普通意义上的数学运算,也可以是打印输出等动作。属性文法的类型和计算S-属性文法:是L-属性文法的一个特例,只含有综合属性。例2是一个S-属性文法。S-属性文法翻译器:可以借助LR分析器实现。实现原理:LR分析器中增加一个栈(语义值栈)用来存放综合属性的值,进行归约的同时,栈中正在归约的产生式右部符号的综合属性值弹栈,并调用相应语义子程序进行相应

8、计算(完成属性文法中的语义规则),产生的新值入语义值栈。举例:参见P174图8.7S-属性文法和自下而上翻译L-属性文法:对于文法中的每个产生式AX1X2…Xn,其每个语义规则中的每个属性要么是综合属性,要么是Xj(1≤j≤n)的一个继承属性且该继承属性仅依赖于:产生式中X1,X2,…Xj-1的属性和A的继承属性。L-属性文法优点:允许一次遍历就计算出所有属性值。L-属性文法L-属性

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。