当前位置:文档之家› 编译原理语义分析详解

编译原理语义分析详解


machunyan
西北工业大学软件与微电子学院
7
5.1 属性和属性文法
至今没有形式化的系统来描述语义,但 存在一种属性文法,将语义信息和程序 设计语言的语法结构联系起来。 补充说明合法程序的规格说明
machunyan

西北工业大学软件与微电子学院
8
5.1 属性和属性文法(续)
每个属性文法是一个三元式: A=(G, V, F) G是一个上下文无关文法; V是一个属性的有限集合; F是一个与属性有关的语义规则的有限集 合。
2. 静态语义检查举例:
类型检查:指类型相容问题的检查,如果操作符作用于不 相容的操作数,则编译器应该报错。 上下文有关问题的检查:当某个对象出现时,要求它必须 在前面的某个适当位置已经出现过。 唯一性检查:要求某个对象只能被定义一次。 控制流检查:引起控制流从某个结构中跳转出来的语句, 必须能够决定控制流转向的目标地址。 Break和continue语句是否在循环结构中? 对于一个方法调用,实际参数的类型和实际参数的个数是 否与方法的声明的参数特征相符? 数组下标引用是否超出范围? 数组下标是否是整数?
machunyan 西北工业大学软件与微电子学院 11
5.1 属性和属性文法(续)
属性a1,...,ak的属性文法是文法所有产生式的语 义规则的集合。一般将属性文法写成表格形式, 每个产生式用相应语义规则列出,如下所示:
文法规则
产生式1 ... 产生式n
语义规则
相关的属性等式 ... 相关的属性等式
machunyan
西北工业大学软件与微电子学院
12
5.1 属性和属性文法(续)
属性文法的作用? 根据已求得的各产生式的语义规则,遍历 语法分析的结果---语法树或分析树,计 算任意句子的推导过程中各文法符号对应 的属性值(例如:变量的数据类型、表达式的值、存 储器中变量的位置、程序的目标代码、或数的有效位数等), 根据属性值分析相关语义,或者将属性值 存储在符号表中,以供编译的后续阶段使 用。
machunyan
西北工业大学软件与微电子学院
9
5.1 属性和属性文法(续)
V: 每个文法符号(终结符号或非终结符 号)都有一个属性集(语义信息)。 如果X是一个文法符号,与X关联的属 性a的值记作X.a。
文法符号关联的属性可以代表

2018/10/15
变量的数据类型 表达式的值 存储器中变量的位置 程序的中间或目标代码片段 数的有效位数 ……等
西北工业大学软件与微电子学院
17
5.1 属性和属性文法(续)
属性文法的求解方法: 给出一个句子最左推导对应的分析树,而 且该句子的推导过程中基本涵盖各种语法 规则(即产生式规则)的运用。 根据该句子的分析树和已知文法符号的属 性值,概括出各节点属性值的计算规则, 将该计算规则作为节点对应的产生式的语 义规则,最后得到属性文法。
西北工业大学软件与微电子学院 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
西北工业大学软件与微电子学院
2
编译器逻辑结构的组成 常数表 符号表 错误处理器
源 代 码
词 法 分 析 程 序
语 法 分 析 程 序
语 义 分 析 程 序
中 间 代 码 生 成
代 码 优 化 程 序
目 标 代 码 生 成
目 标 代 码
machunyan
西北工业大学软件与微电子学院
machunyan
西北工业大学软件与微电子学院
16
文法规则 digit → 0 digit → 1 digit → 2 digit → 3 . . .
语义规则 digit.val = 0 digit.val = 1 digit.val = 2 digit.val = 3 . . .
machunyan
3
第5章 语义分析(续)
语义分析的任务:
1. 计算各类语法成分的语义信息(属性信息), 一般将收集的语义信息存放到相应的信息 表中,在编译程序中符号表是用来存放源 程序中标示符相关属性(语义)信息的一种 信息表。
machunyan
西北工业大学软件与微电子学院
4
第5章 语义分析(续)
语义分析的任务:
课程内容 第1章 概论 第2章 词法分析 第3章上下文无关文法 第4章语法分析 第5章语义分析 第6章运行时环境 第7章代码生成
2018/10/15
西北工业大学软件与微电子学院 machunyan
1
第5章 语义分析
程序设计语言的语义分为静态语义和动态语 义两种。 静态语义是指在编译阶段能够检查的语义; 动态语义是指在目标程序运行阶段能够检 查的语义。
machunyan 西北工业大学软件与微电子学院 13
5.1 属性和属性文法(续)
例5.1:求解下述无符号数文法的val(十进制 值)属性的属性文法。 number→number digit |digit digit→0|1|2|3|4| 5 |6|7|8|9 文法定义的合法的句子举例: 345对应的分析树
2018/10/15 西北工业大学软件与微电子学院 machunyan 5
第5章 语义分析(续)
2018/10/15
西北工业大学软件与微电子学院 machunyan
6
第5章 语义分析
5.1 属性和属性文法 5.2 符号表 5.3 数据类型和类型检查
文法符号语 义信息的计 算技术 语义分析 的两个主 要方面
machunyan
西北工业大学软件与微电子学院
14
数345对应 的分析树
machunyan
西北工业大学软件与微电子学院
15
文法规则 number1→number2 digit
语义规则 number1.val = number2.val*10 + digit.val
number→digit
number.val =digit.val
相关主题