sun编译原理第5章语法制导翻译技术和中间代码生成(第1921讲).ppt
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
19.03.2019
信息学院 孙丽云
6
■ 练习
1.简单的整数算术表达式文法如下,请改写成 值属性文法。 E E+ T | T T T*F | F F (E) | I 2. 已知无符号数文法如下,请改写成值属性 文法。 NND|D D0|1|2|3|4|5|6|7|8|9
19.03.2019
5.1 概述 词法分析:分析的预备阶段,输出是单词符号序列; 语法分析:分析的主要阶段,输出是语法树。 但这样还不能完全确定源程序的正确性,也没有获得 翻译时所需的所有信息。
■ 语义分析的任务
首先编译程序审查每个语法结构的静态语义,如 果静态语义正确,再生成中间代码。
注意:有的编译程序不生成中间代码而直接生 成实际的目标代码。
19.03.2019
信息学院 孙丽云 9
依赖图以属性等式为最小结构单位。一个文法 的依赖图就是全部属性等式依赖图的总和。
所以字符串345对应的语法树的依赖图: number.val
注意:文法规则中同一产生式中某符号出现多次 必须使用下标进行区分。例: number1number2digit
19.03.2019
信息学院 孙丽云 4
● 例如:
1) 已知无符号数文法如下,请改写成值属性文法。 number number digit | digit digit 0|1|2|3|4|5|6|7|8|9
其中每个断言与文法某产生式相关联。 例: Em+n,则与该产生式相关联的断言为: E.val=m.val+n.val……
19.03.2019
信息学院 孙丽云 3
■ 属性文法
一般地,将属性文法写成表格形式,每个文法规则 用属性等式的集合或相应规则的语义规则列出。
文法规则 规则 1 . . 规则 n 语义规则 相关的属性等式 . . 相关的属性等式
19.03.2019
信息学院 孙丽云 1
5.2 属性文法 词法规则的描述工具: 正规文法或正规式 语法规则的描述工具: 上下文无关文法 语义规则的常用描述工具: 属性文法
■ 基本概念
属性是编程语言结构的任意特性,如: 变量的数据类型 X.a是与X关联的a的值 (X 是 表达式的值 一个文法符号,a 是 X的一 存储器中变量的位置 个属性)。如:X.type(X的类 型 ) 、 X.place(X 的存储位置 ) 、 程序的目标代码 X.val(X的值) 数的有效位数
number2 .val
19.03.2019
信息学院 孙丽云
8
例: 已知无符号数属性文法,请画出属性等式及345的依赖图。
grammar rule semantic rules number1number2digit number1.val=number2.val*10+digit. val number digit number.val= digit.val
19.03.2019
信息学院 孙丽云 2
■ 属性文法
属性文法是在上下文无关文法的基础上,允许每个文法 符号X(终结符或非终结符)根据处理的需要,定义与X相 关联的属性。
即:以语法分析为基础,对应文法的每个产生式,确定 相应的语义规则。
一个属性文法形式上定义为一个三元组AG, AG=(G,V,E)。其中G表示一个上下文无关文法;V表 示属性的有穷集;E表示属性的断言或谓词的有穷集。
解:(1)属性等式number1.val = number2.val*10+digit.val 文法规则number1number2digit 的依赖图: number1 .val number2 .val digit.val
(2)属性等式number.val = digit.val number .val 文法规则numberdigit 的依赖图: digit.val
semantic rules exp1.val=exp2.val+term.val exp1.val=exp2.val-erm.val exp.val= term.val term1.val=term2.val*factor.val term.val=factor.val factor.val=exp.val factor.val=number.val
解: 文法规则
number1number2digit
Leabharlann Baidu
语义规则
number1.val = number2.val*10+digit.val
number digit digit 0 digit 1 digit 2 digit 3 digit 4 digit 5 digit 6 digit 7 digit 8 digit 9
信息学院 孙丽云 7
■ 属性的计算 使用属性文法来计算属性值,即把属性等式转化成计算规则
关键:如何决定属性值的计算顺序
可用依赖图(或称相关图)来决定属性值的计算顺序。
例:属性等式number1.val = number2.val*10+digit.val 则,文法规则number1number2digit 的依赖图: number1 .val digit.val
2) 简单的整数算术表达式文法如下,请改写成值属性文法。 exp exp + term | exp-term | term term term*factor | factor factor (exp) | number
解: grammar rule
exp1 exp2+term exp1 exp2-term exp term term1 term2*factor term factor factor (exp) factor number
number.val= digit.val digit.val = 0 digit.val = 1 digit.val = 2 digit.val = 3 digit.val = 4 digit.val = 5 digit.val = 6 digit.val = 7 digit.val = 8 digit.val = 9