编译原理语义分析
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
machunyan
西北工业大学软件与微电子学院
29
5.1 属性和属性文法-继承属性
继承属性的计算 void PreEval(T: treenode); {for each child C of T do compute all inherited attributes of C; PreEval ( C ); }
machunyan
西北工业大学软件与微电子学院
12
5.1 属性和属性文法(续)
属性文法的作用? 根据已求得的各产生式的语义规则,遍历 语法分析的结果---语法树或分析树,计 算任意句子的推导过程中各文法符号对应 的属性值(例如:变量的数据类型、表达式的值、存 储器中变量的位置、程序的目标代码、或数的有效位数等), 根据属性值分析相关语义,或者将属性值 存储在符号表中,以供编译的后续阶段使 用。
32
5.1 属性和属性文法-继承属性
文法规则 语义规则
id.dtype = var-list1.dtype var-list2.dtype = var-list1→id,var-list2
34 val=34
3 val=3
machunyan
西北工业大学软件与微电子学院
28
5.1 属性和属性文法-继承属性
从语法分析树角度看,一个节点的某一属性 值是由父结点和/或兄弟结点的属性值来计 算,则该属性称为继承属性。 继承属性的计算可以通过对分析树或语法树 的前序遍历或前序和中序遍历的组合来进行, 用伪代码表示:
machunyan
西北工业大学软件与微电子学院
20
树遍历的合成属性的计算
void PostEval (T: treenode);
{ for each child C of T do
{
PostEval (C);
} compute all synthesized attributes of T; }
machunyan 西北工业大学软件与微电子学院 21
31
5.1 属性和属性文法-继承属性
文法规则
decl→type var-list type→int type→float
语义规则
var-list.dtype = type.dtype type.dtype = integer type.dtype = real
machunyan
西北工业大学软件与微电子学院
课程内容 第1章 概论 第2章 词法分析 第3章上下文无关文法 第4章语法分析 第5章语义分析 第6章运行时环境 第7章代码生成
2016/7/10
西北工业大学软件与微电子学院 machunyan
1
第5章 语义分析
程序设计语言的语义分为静态语义和动态语 义两种。 静态语义是指在编译阶段能够检查的语义; 动态语义是指在目标程序运行阶段能够检 查的语义。
machunyan
西北工业大学软件与微电子学院
19
5.1 属性和属性文法-合成属性
一个属性文法中所有的属性都是合成的,就 称作S-属性文法(S-attributed grammar)。 合成属性的计算 给定由语法分析程序构造的分析树或语法 树,S-属性文法的属性值可以通过对树进 行简单的自底向上或后序遍历来计算。
machunyan 西北工业大学软件与微电子学院 13
5.1 属性和属性文法(续)
例5.1:求解下述无符号数文法的val(十进制 值)属性的属性文法。 number→number digit |digit digit→0|1|2|3|4| 5 |6|7|8|9 文法定义的合法的句子举例: 345对应的分析树
22
5.1 属性和属性文法-合成属性
文法规则 exp1→exp2+term exp1→exp2-term exp→term 语义规则 exp1.val=exp2.val+ term.val exp1.val= exp2.val-term.val exp.val=term.val
machunyan
西北工业大学软件与微电子学院
2016/7/10 西北工业大学软件与微电子学院 machunyan 5
第5章 语义分析(续)
2016/7/10
西北工业大学软件与微电子学院 machunyan
6
第5章 语义分析
5.1 属性和属性文法 5.2 符号表 5.3 数据类型和类型检查
文法符号语 义信息的计 算技术 语义分析 的两个主 要方面
machunyan
西北工业大学软件与微电子学院
Βιβλιοθήκη Baidu
16
文法规则 digit → 0 digit → 1 digit → 2 digit → 3 . . .
语义规则 digit.val = 0 digit.val = 1 digit.val = 2 digit.val = 3 . . .
machunyan
machunyan
西北工业大学软件与微电子学院
18
5.1 属性和属性文法-合成属性
如果给定一个产生式A→X1X2...Xn,相关属性 等式满足:A.a=f(X1.a1,…,X1.ak,..., Xn .a1,…,Xn.ak),则属性a是合成(综合)的, 例如:无符号数文法的val(十进制值)属性 从语法分析树角度看,如果一个节点(文法 符号)的某一属性值由其子节点的属性值来 计算,则称该属性为合成属性。
machunyan
西北工业大学软件与微电子学院
30
5.1 属性和属性文法-继承属性
例5.3:对于文法
decl→type var-list
type→int|float
var-list→id,var-list|id
试写出有关属性dtype(数据类型)的属性文法:
machunyan
西北工业大学软件与微电子学院
西北工业大学软件与微电子学院
17
5.1 属性和属性文法(续)
属性文法的求解方法: 给出一个句子最左推导对应的分析树,而 且该句子的推导过程中基本涵盖各种语法 规则(即产生式规则)的运用。 根据该句子的分析树和已知文法符号的属 性值,概括出各节点属性值的计算规则, 将该计算规则作为节点对应的产生式的语 义规则,最后得到属性文法。
machunyan 西北工业大学软件与微电子学院 11
5.1 属性和属性文法(续)
属性a1,...,ak的属性文法是文法所有产生式的语 义规则的集合。一般将属性文法写成表格形式, 每个产生式用相应语义规则列出,如下所示:
文法规则
产生式1 ... 产生式n
语义规则
相关的属性等式 ... 相关的属性等式
factor.val=number.val
machunyan
西北工业大学软件与微电子学院
24
5.1 属性和属性文法-合成属性
对于上述简单整型算术表达式文法,假设表 达式(34-3)*42语法分析的结果如下: * 42
34 3
(34-3)*42 的抽象语法树
machunyan
西北工业大学软件与微电子学院
23
5.1 属性和属性文法-合成属性
文法规则 语义规则 term1→term2*factor term1.val=term2.val*factor.val term→factor term.val=factor.val
factor→(exp)
factor→number
factor.val=exp.val
machunyan
西北工业大学软件与微电子学院
2
编译器逻辑结构的组成 常数表 符号表 错误处理器
源 代 码
词 法 分 析 程 序
语 法 分 析 程 序
语 义 分 析 程 序
中 间 代 码 生 成
代 码 优 化 程 序
目 标 代 码 生 成
目 标 代 码
machunyan
西北工业大学软件与微电子学院
3
第5章 语义分析(续)
语义分析的任务:
1. 计算各类语法成分的语义信息(属性信息), 一般将收集的语义信息存放到相应的信息 表中,在编译程序中符号表是用来存放源 程序中标示符相关属性(语义)信息的一种 信息表。
machunyan
西北工业大学软件与微电子学院
4
第5章 语义分析(续)
语义分析的任务:
西北工业大学软件与微电子学院 machunyan 10
5.1 属性和属性文法(续)
F: 每个产生式都有一个与文法符号属性相关的 语义规则集合。对于上下文无关文法中的任一产 生式X0→X1X2...Xn,其语义规则定义格式如下: Xi.aj=fij(X0.a1,...,X0.ak,X1.a1,..., X1.ak,...,Xn.a1,...,Xn.ak) 其中,a1,...,ak是与各文法关联的属性集合;fij是 一个数学函数,表示文法符合Xi的第j个属性aj 是如何计算得到的。 所以,产生式的语义规则是产生式中相关文法符 号属性值的等式。
machunyan
西北工业大学软件与微电子学院
7
5.1 属性和属性文法
至今没有形式化的系统来描述语义,但 存在一种属性文法,将语义信息和程序 设计语言的语法结构联系起来。 补充说明合法程序的规格说明
machunyan
西北工业大学软件与微电子学院
8
5.1 属性和属性文法(续)
每个属性文法是一个三元式: A=(G, V, F) G是一个上下文无关文法; V是一个属性的有限集合; F是一个与属性有关的语义规则的有限集 合。
2. 静态语义检查举例:
类型检查:指类型相容问题的检查,如果操作符作用于不 相容的操作数,则编译器应该报错。 上下文有关问题的检查:当某个对象出现时,要求它必须 在前面的某个适当位置已经出现过。 唯一性检查:要求某个对象只能被定义一次。 控制流检查:引起控制流从某个结构中跳转出来的语句, 必须能够决定控制流转向的目标地址。 Break和continue语句是否在循环结构中? 对于一个方法调用,实际参数的类型和实际参数的个数是 否与方法的声明的参数特征相符? 数组下标引用是否超出范围? 数组下标是否是整数?
machunyan
西北工业大学软件与微电子学院
9
5.1 属性和属性文法(续)
V: 每个文法符号(终结符号或非终结符 号)都有一个属性集(语义信息)。 如果X是一个文法符号,与X关联的属 性a的值记作X.a。
文法符号关联的属性可以代表
2016/7/10
变量的数据类型 表达式的值 存储器中变量的位置 程序的中间或目标代码片段 数的有效位数 ……等
machunyan 西北工业大学软件与微电子学院 26
5.1 属性和属性文法-合成属性
后序遍历语法树计算val属性的伪代码: 树节点的属性值由该节点所用产生式的语 义规则来定义(计算)。 后序遍历语法树.doc
machunyan
西北工业大学软件与微电子学院
27
表达式(34-3)*42对应的加了注释的抽象语法 树如下: * val=31*42=1302 val=34-3=31 42 val=42
machunyan
西北工业大学软件与微电子学院
14
数345对应 的分析树
machunyan
西北工业大学软件与微电子学院
15
文法规则 number1→number2 digit
语义规则 number1.val = number2.val*10 + digit.val
number→digit
number.val =digit.val
5.1 属性和属性文法-合成属性
例5.2:撰写下述简单整型算术表达式文法 的val(十进制值)属性的属性文法。 exp→exp+term|exp-term|term term→term*factor|factor factor→(exp)|number
machunyan
西北工业大学软件与微电子学院
25
5.1 属性和属性文法-合成属性
如果把分析树中对应该文法符号的节点看成是一条记录, 其中,那么属性,就相当于一个域的名字。上页抽象语法 树的定义如下: typedef enum { Plus, Minus, Times } OpKind; typedef enum { OpKind, ConstKind } ExpKind; typedef struct streenode { ExpKind kind; OpKind op; struct streenode *lchild, *rchild; int val; } STreeNode; typedef STreeNode *SyntaxTree;