编译原理第六章
编译原理课程设计之第六章 语义分析

mcy
2
语义分析的任务:
计算各类语法成分的语义信息(属性信息),一般将收集
的语义信息存放到相应的信息表中,在编译程序中符号 表是用来存放源程序中标示符相关属性(语义)信息的一 种信息表。 静态语义检查
类型检查:指类型相容问题的检查,如果操作符作用于不相容的操作数, 则编译器应该报错。 上下文有关问题的检查:当某个对象出现时,要求它必须在前面的某个 适当位置已经出现过。 唯一性检查:有时,要求某个对象只能被定义一次。 控制流检查:引起控制流从某个结构中跳转出来的语句,必须能够决定 控制流转向的目标地址。
(1)所采用的语法分析方法
(2)属性的计算次序。 语法分析方法都要求从左向右处理输入程 序,等价于要求属性能通过从左向右遍历 分析树进行赋值。
mcy
44
定义属性a1,...,ak 的一个属性文法是L-属性(Lattributed)文法,如果满足
mcy
37
num→digit
num.val=digit.val digit.base=num.base digit.val=0 digit.val=1 digit.val=7
digit→0 digit→1 ...... digit→7
mcy
38
digit→8
digit→9
if digit.base=8 then digit.val=error else digit.val= 8 if digit.base=8 then digit.val= error else digit.val 9
mcy
29
文法规则
语义规则 var-list.dtype = type.dtype type.dtype = integer type.dtype = real
北大编译原理chapter6

(12)CHARACTER FUNCTION PRDUCE()
(13) CHARACTER * 80 BUFFER
(14) INTEGER NEXT
(15) SAVE BUFFER,NEXT
(16) DATA NEXT/81/
(17) IF(NEXT.GT.80)THEN
(18) READ(*,'(A)')BUFFER
15
environment
state
名字
存储单元
值
l-value
r-value
存储分配
程序运行
图6.5 从名字到值的两个阶段映射
16
静态概念 过程定义 名字说明 说明的作用域
动态对应 过程活动 名字的绑定 活动的生存期
17
6.1.6 提出的问题
编译程序组织存储分配所采用策略和方法主
要取决于对源程序中下面的问题的回答。
可能有几处说明,语言的作用域规则规定:
在语句序列中引用的一个名字是在何处说
明的名字。
3 . 编译时,处理说明把名字及其属性信息填
写进符号表(add(id.entry,id.vul)); 处理引用
名字时,查找这个名字的属性信息
(lookup(id)),符号表管理程序根据语 言的
作用域规则,使 lookup(id)返回id的作用域
3. 栈:Pascal,c 4. 堆: Pascal,c
21
6.2.2 活动记录 把过程的一个活动所需要的信息组织成一
块连续的存储单元,称为活动记录。 一个活动所需要的信息的每个数据项有相
同的生存期,因此,组织成一个活动记录是 很自然的。
对于pascal语言来说,运行过程中,当调用 一个过程时,在栈顶构筑它的活动记录;当 这个过程的活动执行完后,把它从栈顶弹出。
编译原理 6章

尽管上面这些映射函数都不包含一个以上的对偶,但这个PDA 仍是非确定的。其中,前五个转换函数用于把输入符号移进栈 。接下来的六个用于完成归约工作,该PDA恰好识别L(G).
1 2 3 4 5 6
考虑输入串a*a+a,只 有下面的移动序列 才能够到达终止状 态: (q,$,a*a+a)├ (q,$a,*a+a)├ (q,$F,*a+a)├ (q,$T,*a+a)├ (q,$T*,a+a)├ (q,$T*a,+a)├
例6.5 考虑算术表 达式文法G3[E]: E→E+T E→T T→TF T→F F→(E) F→a
该文法的PDA映射函数δ为 δ(q,ε,a)={(q,a)} 根据规则6(①) δ(q,ε,+)={(q,+)} δ(q,ε,*)={(q,*)} δ(q,ε,‘(’)={(q,‘(’)} δ(q,ε,‘)’)={(q,‘)’)} δ(q,E+T,ε)={(q,E)} 根据规则6(②) δ(q, T,ε)={(q,E)} δ(q,T*F,ε)={(q,T)} δ(q,F,ε)={(q,T)} δ(q,(E),ε)={(q,F)} δ(q,a,ε)={(q,F)} δ(q,$E,ε)={(r,ε)} 根据规则6(③)
7 (q,$T*F,+a)├ 8 (q,$T,+a)├ 9 (q,$E,+a)├ 10 (q,$E+,a)├ 11 (q,$E+a,ε)├ 12 (q,$E+F,ε)├ 13 (q,$E+T,ε)├ 14 (q,$E,ε)├ 15 (r,ε,ε)├
E→E+T E→T T→TF T→F F→(E) F→a
关系积记为r1r2xr1r2y当且仅当存在w使得xr1w与wr2y传递闭包关系r的传递闭包记为rxyxry当且仅当存在n0使得xrny自反传递闭包关系r的传递闭包记为rxyxry当且仅当存在n0使得xrny其中r0为恒等布尔矩阵和关系?关系可用集合定义也可用布尔矩阵表示xry当且仅当mxy1?定理61mrtmrt?定理62mr1r2mr1mr2?定理63mr1r2mr1mr2?定理64mrmr传递闭包的warshall算法forj
编译原理第6章 运行时存储空间组织和符号表

运行时存储空间组织和符号表
3
当前活动记录一般包含如下内容: 连接数据: ①返回地址 ②动态链:指向调用该过程前的运行活动记录地 址的指针。运行时,使运行栈上各数据区按动态 建立的次序连成链。链头为栈顶起始位置。 ③静态链:指向静态直接外层最新活动记录地址 的指针,用来访问非局部数据。 形式单元:存放相应实在参数的地址或值。 局部数据区:局部数据、内情向量、临时单元。 ( P164 图6.7 )
2013-6-28
运行时存储空间组织和符号表
35
1
14
例:n=13 32
2013-6-28
运行时存储空间组织和符号表
36
三、 名字的作用范围 1、Fortran的符号表组织
2013-6-28
运行时存储空间组织和符号表
37
2、Pascal符号表组织
最近嵌套作用域原则:一个名字的作用 域是那个包含了这个名字的说明的最小 函数。 设计符号表: ①采用栈符号表:新的名字从栈顶填入, 每当进入一个过程时建立一张子符号表, 退出时释放。 ②引入过程的嵌套层次表(DISPLAY)
2013-6-28
运行时存储空间组织和符号表
14
§2 静态存储分配
FORTRAN77采用的是静态存储分配,它 的程序是段结构,整个程序由主程序段和若 干个子程序段组成,它的每个数据名所需的 存储空间大小都是常量,并且不允许递归调 用,这样,整个程序所需存储空间的总量在 编译时就能完全确定,所以,可以采用静态 存储分配方式。
2013-6-28
运行时存储空间组织和符号表
42
2013-6-28
运行时存储空间组织和符号表
43
2013-6-28
运行时存储空间组织和符号表
吉林大学编译原理课件第六章

类型的内部表示
类型的种类:标准、子界、枚举、数组、记录、 类型的种类:标准、子界、枚举、数组、记录、
集合、文件、指针类型等等。 集合、文件、指针类型等等。 TypeKind=(intTy,boolTy,charTy,realTy,enumTy, subTy,arrayTy,recordTy,setTy,fileTy,pointerTy)
符号表的实现
用局部符号表实现 proc p:x,y,z proc p1:x,y1,z1 proc p2:y y,z x,y1,z1,y proc p3:z,a x,y,a x,z
符号表的实现
用全局符号表实现 proc p0:x,y proc p1:x,z y proc p2:x1,y1 y x,z
语义分析和符号表
主要内容: 主要内容: 语义分析概述(必要性、功能、描述方法) 语义分析概述(必要性、功能、描述方法) 符号表 类型表达式 声明和程序体的语义分析
语义分析的必要性
语法和语义的区别; 语法和语义的区别; 语法: 语法:关于什么样的字符串才是该语言 在组成ห้องสมุดไป่ตู้构上合法的程序的法则。 在组成结构上合法的程序的法则。 语义: 语义:关于结构上合法的程序的意义的 法则。 法则。
内部表示( 内部表示(AttributeIR): ):
常量: 常量: 类型: 类型: 变量: 变量: 域名*: 域名 : 过函: 过函:
TypePtr TypePtr Kind Kind Value Forward Access Off Off Level Parm Class Code Size Forward Level Off
TypePtr Kind TypePtr Kind
HostType
编译原理 第六章 上机辅导

23
3.3 语法分析器
语法分析器的任务:分析语言的结构 1. 为句子构造语法树; 2. 检查输入序列中的错误。 主要工作: 1. 设计SQL语言的文法; 2. 设计语法树的节点,用于存放表达式的语法树; 3. 利用YACC工具分析SQL语句,并构造语句的语法树; 4. 设计测试程序和测试用例,检验分析器是否正确。
19
3.2 词法分析器
SQL语句中的记号: [例] CREATE TABLE Student ( Sno CHAR(9), Sname CHAR(20), Ssex CHAR(2), Sage INT ); 上边的SQL语句包括哪些记号? 关键字:CREATE TABLE CHAR INT 标示符:Student Sno Sname Ssex Sage 数字: 9,20,2 其他符号:' ( ' ' ) ' ' , ' ' ; '
11
12
3.1 数据库存储结构设计
综上所述,建立一个表时有以下2步: 1. 将表对应的表字典表的数据插入.dat文件中,也就是向表 字典表中添加一条记录。 例如:
Students 表名 1 表id 4 列数 35 列总长度 1 起始块 NULL 保留
2. 将表对应的列字典表的数据插入.dat文件中,即向列字典 表中添加表的各列对应的记录。 例如: 1 1 Sno 1 9 0 NULL
20
LEX源程序基本结构如下: [声明]%% 翻译规则 [%% 用户定义子程序]
21
3.2 词法分析器
用正则式识别记号 CREATE TABLE对应的LEX源程序:
CREATE TABLE CHAR INT {return CREATE;} {return TABLE;} {return CHAR;} {return INT;}
编译原理第六章属性文法和语法制导翻译

第六章 属性文法和语法制导翻译要紧内容:[1] 法制导翻译的大体思想; [2] 属性文法的大体概念; [3] 基于属性文法的处置方式;[4] 在自上而下分析和自下而上分析中的属性计算。
大体要求:[1] 明白得语法制导翻译和属性文法的大体思想和方式, [2] 把握属性的计算方式。
教学要点:本章中,咱们将第一介绍属性文法的大体概念,然后介绍基于属性文法的处置方式,讨论如安在自上而下分析和自下而上分析中实现属性的计算。
讲义摘要:6.1 属性文法一、语义分析的任务一、静态语义分析或静态审查。
例如,类型检查、操纵流检查(操纵流语句必需使操纵转移到合法的地址 )、维数检查、越界检查、名字的作用域分析 等。
二、动态语义处置。
若是静态语义正确,语义处置那么要执行真正的翻译。
例如,变量的存储分派;表达式的求值;语句的翻译(中间代码的生成)。
3、总目标:生成等价的中间代码二、属性文法 一、属性所谓属性,其涉及的概念比较普遍,经常使用以描述事物或人的特点、性质,品质等等。
比如,谈到一个 物体,能够用“颜色”描述它,谈起某人,能够利用“有幽默感“来形容他。
对编译程序利用的语法树的结点,能够用"类型"、"值"或"存储位置"来描述它。
二、属性文法(也称属性翻译文法)属性文法是Knuth 在1968年第一提出的。
它是在上下文无关文法的基础上,为每一个文法符号(终结符或非终结符)配备假设干相关的“值”(称为属性)。
这些属性代表与文法符号相关信息,例如它的类型、值、代码序列、符号表内容等等。
属性与变量一样,能够进行计算和传递。
属性加工的进程即是语义处置的进程。
关于文法的每一个产生式都配备了一组属性的计算规那么,称为语义规那么。
语义规那么所描述的工作能够包括属性计算、静态语义检查、符号表操作、代码生成等等。
3、属性文法的形式化概念形式上讲,一个属性文法是一个三元组:A=(G,V,F),其中 G:是一个上下文无关文法。
第6章 属性文法和语法制导翻译 (编译原理 陈火旺).

3
CH.6 属性文法和语法制导翻译
• 在分析-综合模式的编译器中,语义分析是分 析过程的最后一个步骤,只有在这一步才真 正开始考虑程序语言的意义,并着手把它们 翻译成某种中间代码。这一过程通常采用的 方法是属性文法和语法制导翻译方法。 • 语法制导翻译方法的基本思想是,根据翻译 的需要设置文法符号的属性,用属性描述语 法结构的语义,用属性的计算完成翻译。 • 属性文法使文法符号属性值的计算和产生式 相联系。随着语法分析的进行,执行属性值 的计算,从而完成语义分析和翻译的任务。
37
抽象语法树:简例
• 例,为下面文法的句子 a-4+c 建立抽象语法树。 E E+T | E-T | T T (E) T id | num • 为每个运算量或运算符号都建立一个结点。 E • 可以根据表达式的运算顺序自下而上的构造 --+ 语法树 E + T 手工构造。 抽象语法树
9
属性文法、语义规则(2)
• 属性文法的形式: 产生式 语义规则 . 综合属性 A b:=f(c1,c2,…,ck) – 例如 P137.表6.1的属性文法: 继承属性 • EE1+ T E.val := E1.val+ T.val 综合属 – 例如 P139.表6.2的属性文法: 性 DTL L.in := T.type LL1 , id L .in := L.in 1 继承属性 继承属性
10
• 例, P137.
假设:
产生式 ABC
语义规则 A.b:=A.a+B.c C.d:=B.c+1 A有综合属性b和继承属性a B有综合属性c C有继承属性d
继承属性A.a和综合属性B.c在其他适当的地方计算。