编译原理课件chap02(陈火旺)
合集下载
编译原理陈火旺版PPT课件
Action/Goto
Goto
a
b
,
#
L
E
S0
S/3
S/4
1
2
S1
acc
S2
S/5
r2
S3
r3
r3
S4
r4
r4
S5
S/3
S/4
6
2
S6
r1
4
(1)在总控程序的控制下,从左到右扫描输入串根 据分析栈和输入符号的情况,查分析表确定分析 动作; (2) 分析表是LR分析器的核心,根据文法构造,它 包括动作表(Action)和状态转换表(Goto)两部分, 总控程序根据分析表确定分析动作;
输入符号
状态
X1 X2 … Xp
S0
S3
S1
S2
:
:
S5
Sm
8
二、LR分析过程:
1. 将初始状态S0和输入串的左边界(#) 分别进栈; 2. 根据栈顶状态Si和当前输入符号a查动作表进行如下 工作:
•移进:若Action[Si, a]为“移进”,则a进符号栈; 并查Goto[Si, a]得到新的状态Sj进状态栈; 继续扫描, 即下一个输入符号变成当前输入符号;
(3) 分析栈包括文法符号栈X[i]和相应的状态栈S[i] 两部分,LR分析器通过判断栈顶元素和当前输入 符号查分析表确定下步分析动作。
5
规范归约的关键是寻找句柄,LR法是根据已“移 进” 、“归约”的符号串及即将读入的符号串 进行分析,以确定是否有句柄可归约。
状态:是对迄今为止的整个分析过程的记录以及对
r式1数~(1r字)4~表表(示a4示)文,新即法b状应Ac的t态采ion产的,用生编号# , L Goto E
编译原理运行时存储空间组织陈火旺版.ppt
局部数据区(局部变量、内情向量、临时单元)
TOP→ 临时单元 内情向量 局部变量 形式单元 静态链 动态链
SP→ 返回地址
局部数据区 连接数据
三.存储分配策略
静态存储分配 在编译时对所有数据对象分配固定的存储单元 (FORTRAN) 且在运行时始终保持不变 栈式 在运行时把存储器作为一个栈进行管理,运行 时每当调用一个过程,它所需空间就动态分配于 栈顶,一旦退出,所占空间予以释放(C,Pascal)
故返回P:=x+y ,即Z=4.
例2.(上海交通大学)假定下列程序在语法上是正确的。 Program text (input,output); Var i,j:integer procedure cal (x,y:integer); begin y:=y**2; x:=x-y; y:=y-x; end ; {cal} begin {main} i:=2 ; j:=3; cal(i, j); writeln(j:1) end {main} 采用哪种参数传递方式使上述程序打印16,采用哪种 方式使程序结果为3 传地址、传名 传值
例1.(清华大学 考研试题) 在下面的函数P中,参数x是通过地址传递的,参数y通过 值传递
FUNCTION P(VAR x:integer ; y:integer) : integer; BEGIN K:=3; L:=5; P:=x+y
END; 若P由下列程序调用
K:=1;
L:=1;
Z:=P(K,L) 则问Z的值是什么,这两种参数传递机制如何实现?
解:当传值时,在调用段对参数进行的修改在主程序 段中不对参数实际值造成影响,而传地址时,在 调用段对参数的修改就实际改变了参数值 x传地址 y传值 Z:=P(K,L) K地址传到调用段。K:=3即x:=3 y只是L的值,过程体中L:=5不改变y的值 故此时 x=3,y仍为1。 所以P:=x+y,即为P:=3+1=4。
TOP→ 临时单元 内情向量 局部变量 形式单元 静态链 动态链
SP→ 返回地址
局部数据区 连接数据
三.存储分配策略
静态存储分配 在编译时对所有数据对象分配固定的存储单元 (FORTRAN) 且在运行时始终保持不变 栈式 在运行时把存储器作为一个栈进行管理,运行 时每当调用一个过程,它所需空间就动态分配于 栈顶,一旦退出,所占空间予以释放(C,Pascal)
故返回P:=x+y ,即Z=4.
例2.(上海交通大学)假定下列程序在语法上是正确的。 Program text (input,output); Var i,j:integer procedure cal (x,y:integer); begin y:=y**2; x:=x-y; y:=y-x; end ; {cal} begin {main} i:=2 ; j:=3; cal(i, j); writeln(j:1) end {main} 采用哪种参数传递方式使上述程序打印16,采用哪种 方式使程序结果为3 传地址、传名 传值
例1.(清华大学 考研试题) 在下面的函数P中,参数x是通过地址传递的,参数y通过 值传递
FUNCTION P(VAR x:integer ; y:integer) : integer; BEGIN K:=3; L:=5; P:=x+y
END; 若P由下列程序调用
K:=1;
L:=1;
Z:=P(K,L) 则问Z的值是什么,这两种参数传递机制如何实现?
解:当传值时,在调用段对参数进行的修改在主程序 段中不对参数实际值造成影响,而传地址时,在 调用段对参数的修改就实际改变了参数值 x传地址 y传值 Z:=P(K,L) K地址传到调用段。K:=3即x:=3 y只是L的值,过程体中L:=5不改变y的值 故此时 x=3,y仍为1。 所以P:=x+y,即为P:=3+1=4。
编译原理-陈火旺版-第一章
编译器的作用与重要性
01
编译器是将高级语言程序翻译成机器语言程序的软件工具,是 软件开发的基础设施之一。
02
编译器可以提高程序的执行效率,使得程序能够在各种计算机
上运行。
编译器还可以对程序进行优化,提程简介
01
02
03
词法分析
将输入的源程序分解成一 个个的单词符号,即词法 单元。
词法分析器的构造
构造原理
根据词法规则构造出识别相应单 词符号的有限自动机,然后将有 限自动机转换为对应的程序代码
构造方法
手工构造法、自动生成法
注意事项
处理好单词符号的二义性问题; 识别出源程序中的错误并进行适 当的处理。
04
语法分析
语法分析概述
语法分析的任务
根据语言的语法规则,对输 入的符号序列进行合法性检 查,并构造出相应的语法结
中间代码的形式
常见的中间代码形式有三地址码、四元式、树形表示等。
中间代码生成算法
根据源程序的语法结构和语义规则,生成相应的中间代码序列。
符号表管理
符号表的作用
符号表用于记录源程序中各种标识符的属性信息,如类型、作用域 和存储地址等。
符号表的组织方式
常见的符号表组织方式有线性表、散列表和树形结构等。
循环优化
通过循环展开、循环合并、循环交换等技术来改进循环的性能。
目标代码生成方法
机器无关代码生成
机器相关代码生成
生成与特定机器无关的中间代码,然后在 运行时将其转换为特定机器上的目标代码 。
直接生成特定机器上的目标代码,这需要 考虑机器的指令集、寄存器分配、内存访 问等因素。
汇编语言代码生成
高级语言虚拟机代码生成
编译原理 陈火旺.
基本字作为特殊的标识符来处理;不用特殊的 状态图来识别,只要查保留字表。
如果基本字、标识符和常数(或标号)之间没 有确定的运算符或界符作间隔,则必须使用一 个空白符作间隔。
DO99K=1,10 要写成 DO 99 K=1,10
3 状态转换图的实现
思想:每个状态结对应一小段程序。
做法:
1)对不含回路的分叉结,可用一个CASE语句或 一组IF-THEN-ELSE语句实现
全局变量与过程
1)ch 字符变量、存放最新读入的源程序 字符
2)strToken 字符数组,存放构成单词符 号的字符串
3)GetChar 子程序过程,把下一个字符 读入到 ch 中
4)GetBC 子程序过程,跳过空白符,直 至 ch 中读入一非空白符
5)Concat 子程序,把ch中的字符连接到 strToken
10)InsertConst 整型函数过程,将 strToken中的常数插入常数表,返回常 数表指针。
int code, value; strToken := “ ”; /*置strToken为空串*/ GetChar(); GetBC(); if (IsLetter()) begin
while (IsLetter() or IsDigit()) begin
如果1 2 n,则我们称这个序 列是从1到n的一个推导。若存在一个从 1到n的推导,则称1可以推导出n 。
通 一常 步,或用若干1步,可n 以表推示出:从n。1出发,经过
*
用 1 n 表示:从1出发,经过0步或
若干步,可以推出n。
*
所以 : 即 或
定义:假定G是一个文法,S 是它的开始符号。
2 例子
助忆符:直接用编码表示不便于记忆, 因此用助忆符来表示编码。
如果基本字、标识符和常数(或标号)之间没 有确定的运算符或界符作间隔,则必须使用一 个空白符作间隔。
DO99K=1,10 要写成 DO 99 K=1,10
3 状态转换图的实现
思想:每个状态结对应一小段程序。
做法:
1)对不含回路的分叉结,可用一个CASE语句或 一组IF-THEN-ELSE语句实现
全局变量与过程
1)ch 字符变量、存放最新读入的源程序 字符
2)strToken 字符数组,存放构成单词符 号的字符串
3)GetChar 子程序过程,把下一个字符 读入到 ch 中
4)GetBC 子程序过程,跳过空白符,直 至 ch 中读入一非空白符
5)Concat 子程序,把ch中的字符连接到 strToken
10)InsertConst 整型函数过程,将 strToken中的常数插入常数表,返回常 数表指针。
int code, value; strToken := “ ”; /*置strToken为空串*/ GetChar(); GetBC(); if (IsLetter()) begin
while (IsLetter() or IsDigit()) begin
如果1 2 n,则我们称这个序 列是从1到n的一个推导。若存在一个从 1到n的推导,则称1可以推导出n 。
通 一常 步,或用若干1步,可n 以表推示出:从n。1出发,经过
*
用 1 n 表示:从1出发,经过0步或
若干步,可以推出n。
*
所以 : 即 或
定义:假定G是一个文法,S 是它的开始符号。
2 例子
助忆符:直接用编码表示不便于记忆, 因此用助忆符来表示编码。
《编译原理》课件
代码生成
编译器可以将高级语言编写的源代码转换成机器语言或低级语言,以便在特定的硬件平台上运行。编 译器还可以生成可执行文件或动态链接库等二进制文件。
编译器在人工智能领域的应用
机器学习编译器
机器学习编译器可以将机器学习模型转换成可执行代码,以便在嵌入式设备或边缘计算 设备上运行。这种编译器可以优化模型的计算性能和内存占用,提高模型的运行效率。
3
缺点
对于某些复杂文法,可能导致大量的无用推导和 状态爆炸。
自底向上的语法分析
分析步骤
从输入符号序列的最后一个符号开始,逐步向上构建语法树,直 到找到与文法中的某个产生式右部匹配的符号串。
优点
可以充分利用已知信息,避免不必要的推导和状态爆炸。
缺点
对于某些复杂文法,可能导致大量的无用归约和状态爆炸。
04
中间代码生成
中间代码生成的定义和任务
定义
中间代码生成是编译器的一个阶段,将源代码转换成中间代码的过程。
任务
将源代码转换成一种中间表示形式,以便进行后续的优化和目标代码生成。
三地址代码的生成
01
三地址代码是一种中间代码形 式,由一系列的三元式组成。
02
三元式的形式为(op, arg1, arg2),表示执行一个操作(op) 并产生一个结果,操作数arg1 和arg2来自寄存器、常数或之 前的计算结果。
语义分析
检查AST是否有语义错误,如类型错 误、未定义的变量等。
中间代码生成
将AST转换为中间代码,通常是三地 址代码。
代码优化
对中间代码进行优化,提高执行效 率。
代码生成
将中间代码转换为机器语言代码, 能够在特定硬件上执行。
编译器的分类
编译器可以将高级语言编写的源代码转换成机器语言或低级语言,以便在特定的硬件平台上运行。编 译器还可以生成可执行文件或动态链接库等二进制文件。
编译器在人工智能领域的应用
机器学习编译器
机器学习编译器可以将机器学习模型转换成可执行代码,以便在嵌入式设备或边缘计算 设备上运行。这种编译器可以优化模型的计算性能和内存占用,提高模型的运行效率。
3
缺点
对于某些复杂文法,可能导致大量的无用推导和 状态爆炸。
自底向上的语法分析
分析步骤
从输入符号序列的最后一个符号开始,逐步向上构建语法树,直 到找到与文法中的某个产生式右部匹配的符号串。
优点
可以充分利用已知信息,避免不必要的推导和状态爆炸。
缺点
对于某些复杂文法,可能导致大量的无用归约和状态爆炸。
04
中间代码生成
中间代码生成的定义和任务
定义
中间代码生成是编译器的一个阶段,将源代码转换成中间代码的过程。
任务
将源代码转换成一种中间表示形式,以便进行后续的优化和目标代码生成。
三地址代码的生成
01
三地址代码是一种中间代码形 式,由一系列的三元式组成。
02
三元式的形式为(op, arg1, arg2),表示执行一个操作(op) 并产生一个结果,操作数arg1 和arg2来自寄存器、常数或之 前的计算结果。
语义分析
检查AST是否有语义错误,如类型错 误、未定义的变量等。
中间代码生成
将AST转换为中间代码,通常是三地 址代码。
代码优化
对中间代码进行优化,提高执行效 率。
代码生成
将中间代码转换为机器语言代码, 能够在特定硬件上执行。
编译器的分类
编译原理陈火旺
编译原理陈火旺编译原理是计算机科学与技术中的重要学科,它涉及到程序设计语言、编译器、解释器等方面的知识。
在计算机软件开发中,编译原理扮演着至关重要的角色,它是软件开发的基础和核心。
本文将围绕编译原理展开讨论,介绍编译原理的基本概念、原理和应用。
首先,我们来了解一下编译原理的基本概念。
编译原理是指将高级语言程序翻译成机器语言程序的一门学科。
它包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等过程。
编译原理的主要任务是设计和实现编译器,将高级语言程序转换成目标代码,以便计算机能够执行。
其次,我们需要了解编译原理的基本原理。
编译原理的基本原理包括语言的文法、词法分析、语法分析和语义分析等内容。
语言的文法是描述语言结构的形式化规则,词法分析是将源程序转换成单词序列的过程,语法分析是将单词序列转换成语法树的过程,语义分析是对语法树进行语义检查和语义动作的过程。
这些原理是编译原理的基础,对于理解编译原理和设计编译器非常重要。
接下来,我们将介绍编译原理的应用。
编译原理在软件开发中有着广泛的应用,它是编程语言和编译器设计的基础。
通过学习编译原理,可以更好地理解编程语言的设计和实现原理,提高程序设计和编码的能力。
此外,编译原理还在软件工程、人工智能、计算机图形学等领域有着重要的应用,可以帮助开发者更好地理解和利用计算机系统的底层原理。
总的来说,编译原理是计算机科学与技术中的重要学科,它涉及到程序设计语言、编译器、解释器等方面的知识。
通过学习编译原理,可以更好地理解和应用计算机系统的底层原理,提高软件开发的能力。
希望本文能够帮助读者更好地理解编译原理的基本概念、原理和应用,为进一步深入学习和研究编译原理打下坚实的基础。
编译原理 高级语言及其语法描述 陈火旺版
算符优先顺序 乘幂 **或↑ 一元负 — 乘、除 * / ÷ 加、减 + — 关系符 < ≤ > ≥ = ≠ 非 not ·NOT· 与 ∧ & and · AND· 或 ∨ | or ·OR· 隐含 imp 等值 ≡ ~ equi 左结合、右结合
结合顺序
2. 语句
从功能分类 执行性语句 赋值语句、控制语句、输入/输出语句 说明性语句 从形式分类 简单句、复合句、分程序
5.有关术语 (1) 直接推出(推导):若 α A β ⇒ αγβ ,仅当 A → γ 是一个产生式,且
α , β ∈(VT∪VN)*,称 α A β 直接推出 αγβ .
(2) 推导:若 α 1 ⇒ α 2 ⇒… ⇒ α n,则称这个序列是从 α 1 至 α n 的一个推导. 若存在一个从 α 1 至 α n 的推导,则称 α 1 可推导出 α n
4.上下文无关文法的形式描述 一个上下文无关文法 G 是一个四元式(VT,VN,S,P) ,其中 VT 是一个非空有限集,它的每个元素称为终结符号,用小写字母表示 VN 是一个非空有限集,它的每个元素称为非终结符号,用大写字母表示 S 是一个非终结符号,称为开始符号 P 是一个产生式集合(有限) ,每个产生式形如 P →α ,其中 P∈VN, α ∈(VT∪VN)* 开始符号 S 至少必须在某个产生式的左部出现一次 若有 P →α 1,P →α2, P →α 3,…, P →α n 可合并为 P →α 1| α 2| α 3|…| α n,每个 α i 为 P 的一个候选式
注意: 注意: ε
Φ 表示不含任何元素的空集
{ } {ε }
例:若
∑
={a,b},则
∑
*
={ ε ,a,b,aa,bb,ab,ba,bba,aaa,aab,……}
《编译原理》课件
了解中间代码生成的概念和它在编译过程中的角色。 学习四元式和三地址码的表示和生成方式,以及中间代码优化的技巧。
六、代码生成
了解目标机器的指令系统和存储结构,以及它们对代码生成的影响。 学习寄存器分配和目标代码生成的基本原理和方法。
七、附录
参考文献提供了进一步学习编译原理的资源。 课程总结将回顾课程中学到的重要知识,并概述关键概念和技术。 问题解答将回答学生在课程学习中提出的问题。 课程评价将收集学生对课程的反馈和评价,以便对将来的课程进行改进。
《编译原理》PPT课件
编译原理PPT课件将带您深入了解编译原理的重要概念和技术。这个课程介绍 了编译原理的意义以及编译过程的概述。
一、引言
课程介绍编译原理的重要性,让您理解为什么编译原理对于软件开发非常关 键。 编译过程的概述将带您了解传统的编译过程中涉及的各个阶段和任务。
二、词法分析
词法分析是编译过程中的第一步,了解词法分析的作用以及它在编译器中的 实现。 掌握正则表达式和有限自动机的概念,这些是实现词法分骤,理解它的作用和不同的语法分析方法。 学习上下文无关文法以及LL(1)语法分析器和LR(1)语法分析器的实现原理。
四、语义分析
语义分析是编译过程中的重要一环,了解它的作用和涉及的任务。 学习语义动作、符号表管理和类型检查,以及如何进行语法制导翻译。
五、中间代码生成
六、代码生成
了解目标机器的指令系统和存储结构,以及它们对代码生成的影响。 学习寄存器分配和目标代码生成的基本原理和方法。
七、附录
参考文献提供了进一步学习编译原理的资源。 课程总结将回顾课程中学到的重要知识,并概述关键概念和技术。 问题解答将回答学生在课程学习中提出的问题。 课程评价将收集学生对课程的反馈和评价,以便对将来的课程进行改进。
《编译原理》PPT课件
编译原理PPT课件将带您深入了解编译原理的重要概念和技术。这个课程介绍 了编译原理的意义以及编译过程的概述。
一、引言
课程介绍编译原理的重要性,让您理解为什么编译原理对于软件开发非常关 键。 编译过程的概述将带您了解传统的编译过程中涉及的各个阶段和任务。
二、词法分析
词法分析是编译过程中的第一步,了解词法分析的作用以及它在编译器中的 实现。 掌握正则表达式和有限自动机的概念,这些是实现词法分骤,理解它的作用和不同的语法分析方法。 学习上下文无关文法以及LL(1)语法分析器和LR(1)语法分析器的实现原理。
四、语义分析
语义分析是编译过程中的重要一环,了解它的作用和涉及的任务。 学习语义动作、符号表管理和类型检查,以及如何进行语法制导翻译。
五、中间代码生成
编译原理-陈火旺版-第二章
三地址代码具有高度规范化、结构简 单、易于分析和优化等特点,是编译 器设计中常用的中间表示形式。
03
三地址代码的生成方 法
常见的三地址代码生成方法包括直接 生成法、遍历语法树生成法等。
循环结构的优化
循环结构的识别
编译器需要识别出源程序中的循环结构,以便进行优化。
循环结构的优化方法
常见的循环结构优化方法包括循环展开、循环合并、循环嵌套等, 可以提高循环的执行效率。
循环结构优化的度量
循环结构优化的度量标准包括执行时间、空间复杂度、可读性和 可维护性等。
05
代码优化
代码优化概述
01
02
03
代码优化是编译器的一 个重要组成部分,旨在 改进生成代码的性能和
质量。
代码优化的目的是在保 持程序语义不变的前提 下,通过修改程序的结 构和算法,以更高效的 方式实现相同的功能。
编译程序的组成
编译程序通常由词法分析、语法分析、语义分析、中间代码生成、代码 优化和目标代码生成等部分组成。
编译程序的基本工作过程
词法分析
将源程序分解成一个个的单词或符号,并为 其分配相应的属性。
语法分析
根据语法规则将单词或符号序列组合成语法结 构,并判断其是否符合语法规则。
语义分析
对语法结构进行语义检查,包括类型检查、类型 转换等。
中间代码生成
将源程序的语法结构转换成中间代码,通常为三地 址代码。
代码优化
对中间代码进行优化,以提高目标代码的执行效 率。
目标代码生成
将中间代码转换成目标机器语言代码,并生成可执行文 件。
02
词法分析
词法分析概述
01
词法分析是编译过程的第一阶段,负责将源代码分解成一个个 的单词或符号。
编译原理课件chap
3
解释程序
直接解释高级语言程序并执行。
4
编程语言分类
命令式语言、数据流语言和函数式语言。
词法分析器
Scanner
将源代码分割成单个单词,即词 法单元或令牌。
To ken s
是语法分析器的输入,代表源代 码的语义成分。
正则表达式
词法单元模式的定义。
语法分析器
1
Parser
将词法分析器生成的令牌转化为抽象语法树。
Quadruples
包含四个字段的中间代码指令。
Control Flow Graph
表示程序流程的图形结构。
目标代码生成器
1 代码生成器
将特定的中间代码翻译为 汇编语言或机器指令。
2 寄存器分配
给使用寄存器的变量分配 寄存器。
3 代码优化
改进代码性能和可读性。
总结
编译器作用
将高级语言转换为机器语言。
编译器组成
词法分析、语法分析、中间代 码生成和目标代码生成器。
学习策略
通过实践来深入理解编译原理 的基本概念和编译器的工作原 理。
2
上下文无关文法
描述高级编程语言的语法规则。
3
栈
语法分析的数据结构,存储产生式的序列。
语义分析器
AST
抽象语法树包含词法单元所 代表的语义。
类型检查
检查操作数和运算符是否匹 配。
符号表
存储标识符和它的类型信息。
中间代码生成器
Intermediate Code
包含源代码的结构信息和机器无 关的细节。
编译原理课件
编译原理课件介绍编译原理的基本概念和编译器的各个组成部分。
课程简介
目的
编译原理 - 陈火旺版 - 第二章
2
内容
• 2.1 程序语言的定义 • 2.2 高级语言的一般特性 • 2.3 程序语言的语法描述
3
2.1 程序语言的定义
• 程序设计语言:是由一组记号所构成的集 合。 • 语言的定义
– 语言用户:语言的成分,使用意义 – 编译程序:语言的规则,语法单位对应的含义
• 组成部分
– 语法 (Syntax) – 语义( Semantics) – 语用( Pragmatics)
• VN和VT不含公共的元素,即VN ∩ VT = φ , • 用V表示VN ∪ VT ,称为文法G的字母表或字汇表
– 开始符号:S,特殊的非终结符号,至少要在一条产生式 中作为左部出现。 – 产生式:P,定义语法范畴的一种书写规则。
• 形如→或 ∷=的( ,)有序对,其中是字母表V的正闭包 V+中的一个符号,是V*中的一个符号。 称为规则的左部, 称作规则的右部。 • 例如:E → i | E+E | E*E | (E) • 候选式 26
14
数据类型
• 数据结构:从初级数据定义的复杂(高级)数据
– 数组
• 内情向量:便于计算数据元素的地址,包括:维数,各维的上、下限,首地 址,数组元素类型等。 • 例如:
Pascal的说明
var a: array[1..50] of char
是一个下标从1至50的字符数组
– 记录:由已知类型的数据组合而成
13
数据类型
• 数据类型的三要素:属性,值,操作
– 属性:包括类型和作用域
– 类型:决定数据可以是什么样的值,允许的运算,计算机内 如何表示 – 作用域:值的有效范围
• 初等数据类型
– – – – 数值数据:如整型,实型 逻辑数据:布尔型 字符数据:字符型(字符串型) 指针类型:指向另一种数据类型
《编译原理课件》PPT课件
它是源程序的一种内部表示形式。 设计中间代码的原则:一是容易生成,二是
容易翻译成目标代码。 常用的中间代码有三地址码、四元式、三元
式、间接三元式、逆波兰表示(后缀式)、 树形表示等。
14
中间代码:四元式
例: id1:=id2+id3*10
sum:=first+count*10 翻译为四元式中间代码的形式:
5
1.2 编译程序的工作过程与结构
一个编译程序的整个工作过程是划分成阶段 进行的,每个阶段将源程序从一种表示形式 转换成另一种表示形式。
编译阶段的典型划分方法是划分为5个基本阶 段:词法分析、语法分析、语义分析产生中 间代码、代码优化、代码生成。
掌握编译过程的5个基本阶段,是学习编译原 理课程的基本内容。
29
自编译:T形图表示
PASCAL2
A代码
PASCAL2
A代码
PASCAL1 PASCAL1
A代码 A代码
用PASCAL1语言 编写的功能更
强的PASCAL2语 言编译程序的
A代码
已有的PASCAL1 语言的编译程序
自编译得到
功能更强的
PASCAL2语言 的编译程序
源程序
注意:T形图的组合规则:① ②
Java语言的操作平台无关性的实现就是如此。
26
1.3 编译程序的开发
构造编译程序,可以:
1. 使用机器语言或汇编语言作工具构造 2. 使用高级语言作工具构造 3. 使用机器语言或汇编语言构造编译程序的核心
部分,使用高级语言构造编译程序的扩充部分 4. 使用编译程序自动生成工具构造
使用高级语言作工具构造编译程序可以大大节 省程序设计的时间,并且编译程序易于阅读、 维护和移植。
容易翻译成目标代码。 常用的中间代码有三地址码、四元式、三元
式、间接三元式、逆波兰表示(后缀式)、 树形表示等。
14
中间代码:四元式
例: id1:=id2+id3*10
sum:=first+count*10 翻译为四元式中间代码的形式:
5
1.2 编译程序的工作过程与结构
一个编译程序的整个工作过程是划分成阶段 进行的,每个阶段将源程序从一种表示形式 转换成另一种表示形式。
编译阶段的典型划分方法是划分为5个基本阶 段:词法分析、语法分析、语义分析产生中 间代码、代码优化、代码生成。
掌握编译过程的5个基本阶段,是学习编译原 理课程的基本内容。
29
自编译:T形图表示
PASCAL2
A代码
PASCAL2
A代码
PASCAL1 PASCAL1
A代码 A代码
用PASCAL1语言 编写的功能更
强的PASCAL2语 言编译程序的
A代码
已有的PASCAL1 语言的编译程序
自编译得到
功能更强的
PASCAL2语言 的编译程序
源程序
注意:T形图的组合规则:① ②
Java语言的操作平台无关性的实现就是如此。
26
1.3 编译程序的开发
构造编译程序,可以:
1. 使用机器语言或汇编语言作工具构造 2. 使用高级语言作工具构造 3. 使用机器语言或汇编语言构造编译程序的核心
部分,使用高级语言构造编译程序的扩充部分 4. 使用编译程序自动生成工具构造
使用高级语言作工具构造编译程序可以大大节 省程序设计的时间,并且编译程序易于阅读、 维护和移植。
编译原理课件chap02(陈火旺)
长度为1的符号串… 与语言的关系:有的构成单词 句子,有 的不构成
第二章 文法和语言
〈7〉正闭包(∑+) ∑+ =∑1 ∪ ∑2∪. …∪∑n
∑+称∑的正闭包。
显然:∑*= ∑0∪∑+
∑+
=
∑∑*=∑*∑
第二章 文法和语言
3.文法和语言的形式定义
(用以上术语对文法的概念进行形式化)
1、规则(重写规则、产生式、生成式)
如: ababa
则长度是5
4 、空符号串:用ε表示,长度为 0 (不含任何 符号) 若符号串x ,则有εx = xε= x 5、符号串的运算:
(1)
符号串的头和尾
若z=xy,则x是z的头,y是z的尾。
第二章 文法和语言
例:设z=abc ,则z的头是
ε,a,ab,abc
则z的尾是
ε,c,bc,abc
N个
则xy=abMN
设x是符号串,则z=xx……xx,称z为x的方幂, 记z=xn。 因此 x0=ε, x1=x, x2=xx, x3=xxx 显然n>0时, 有xn =x· x
n-1=
x
n-1· x
第二章 文法和语言
(5)符号串的集合:
若集合 A 中的一切元素都是某字母表上的符号 串,则称A为该字母表上的符号串集合。 两个符号串集合A、B乘积定义: AB={xy| x∈A且y∈b}
编译原理
第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 编译程序引论 文法和语言 词法分析 自顶向下语法分析方法 自底向上优先分析方法 LR分析方法 语法制导翻译和中间代码生成 运行时存储空间分配 代码生成
第二章 文法和语言
第二章 文法和语言
〈7〉正闭包(∑+) ∑+ =∑1 ∪ ∑2∪. …∪∑n
∑+称∑的正闭包。
显然:∑*= ∑0∪∑+
∑+
=
∑∑*=∑*∑
第二章 文法和语言
3.文法和语言的形式定义
(用以上术语对文法的概念进行形式化)
1、规则(重写规则、产生式、生成式)
如: ababa
则长度是5
4 、空符号串:用ε表示,长度为 0 (不含任何 符号) 若符号串x ,则有εx = xε= x 5、符号串的运算:
(1)
符号串的头和尾
若z=xy,则x是z的头,y是z的尾。
第二章 文法和语言
例:设z=abc ,则z的头是
ε,a,ab,abc
则z的尾是
ε,c,bc,abc
N个
则xy=abMN
设x是符号串,则z=xx……xx,称z为x的方幂, 记z=xn。 因此 x0=ε, x1=x, x2=xx, x3=xxx 显然n>0时, 有xn =x· x
n-1=
x
n-1· x
第二章 文法和语言
(5)符号串的集合:
若集合 A 中的一切元素都是某字母表上的符号 串,则称A为该字母表上的符号串集合。 两个符号串集合A、B乘积定义: AB={xy| x∈A且y∈b}
编译原理
第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 编译程序引论 文法和语言 词法分析 自顶向下语法分析方法 自底向上优先分析方法 LR分析方法 语法制导翻译和中间代码生成 运行时存储空间分配 代码生成
第二章 文法和语言
编译原理课件PPT 第2章
Chapter 2 Language & Syntax Description Section 2 Grammar & Language 1、Basic concepts a、Grammar Grammar is the formal production rules describing the construction of syntax elements. Notes:1) Syntax elements include sentences and words in sentences, a language is composed of sentences. 2) The form of a production rule is as following: left-sideright-side (that can be read as ―leftside is defined as right-side‖, ―left-side derives right-side‖,or ―left-side produces right-side‖, it expresses the relation between the two sides)
Chapter 2 Language & Syntax Description Section 2 Grammar & Language 1、Basic concepts j、Extended notations of grammar rules Use extended BNF(Backus Naur Form) notations
Chapter 2 Language & Syntax Description Section 2 Grammar & Language 1、Basic concepts b、Non-terminal symbol – A symbol that appears in the left of a rule , is bracketed in <> and expresses a syntax concept. – A set of non-terminal symbols is expressed in VN c、Terminal symbol – Strings in a language that cannot be decomposed (including strings of single characters), expressed in VT. Notes:Terminal symbols are basic elements of a sentence.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二章 文法和语言
<字母 →z 字母> 字母 <数字 →1 数字> 数字 … <数字 →9 } 数字> 数字 S= <标识符 = 标识符 标识符> “< >” 表示非 终结符
第二章 文法和语言
<2> 文法G的第二种表示法: 的第二种表示法: 上例1改为: 上例 改为: G: S → 0S1 改为 S → 01 <3> 文法G的第三种表示法: 的第三种表示法: 上例1改为: G[S]: 上例 改为: 改为 S → 0S1 S → 01 一般约定,第一条产生式的左部是识别(开始) 符号;用尖括号括起来的是非终结符号,不用尖 括号括起来的是终结符号,或者用大写字母表示 非终结符号,小写字母表示终结符号。
第二章 文法和语言
2型文法也称上下文无关文法,注意其语言定 型文法也称上下文无关文法, 义: G的任何产生式为A→β,A∈VN, 的任何产生式为A→β, A→β β∈( β∈(VN∪VT)* 表明凡出现在产生式左边的符号都是非 终结符。 终结符。 型文法也称右线性文法。 3型文法也称右线性文法。3型文法还有另 一种形式,称左线性文法:一个文法G 一种形式,称左线性文A→α 其中α A→Bα 或A→α ,其中α∈VT* , 由于3 A、B ∈ VN 由于3型文法等价于正规式所以也 称正规文法。 称正规文法。
第二章 文法和语言
3、直接推导的定义 、
<1> α → β 是文法 (VN ,VT ,P,S)的规则, 文法G=( 文法 , )的规则, 中的任意符号, 满足: γ和δ是V*中的任意符号,若有符号串 ,W满足: 中的任意符号 若有符号串V, 满足 V= γ α δ,W=γ βδ = δ
则说 V是直接产生 是直接产生W 是直接产生 或 W是V的直接推导 是 的直接推导 直接规约到V 或 W直接规约到 直接规约到 记作 V⇒ W ⇒
第二章 文法和语言
(3)符号串的连接: 设x,y是符号串,连接xy是y符号写在x符号之后。 例:x=ab, y=MN 显然:εx=xε=x εx=xε=x (4)符号串的方幂:
N个
则xy=abMN
设x是符号串,则z=xx……xx,称z为x的方幂, 记z=xn。 因此 x0=ε, x1=x, x2=xx, x3=xxx 显然n>0时, 有xn =x·x
符号串有: 0,1,00,01,10,11 例:∑={a,b,c} — 符号集
符号串有:a,b,c,ab,aaca
第二章 文法和语言
3、符号串的长度:符号串x有m个符号,则长度 就为m,表示|x|=m 如: ababa 则长度是5
4、空符号串:用ε表示,长度为0(不含任何 符号) 若符号串x ,则有εx = xε= x 5、符号串的运算: (1) 符号串的头和尾
编译原理
第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 编译程序引论 文法和语言 词法分析 自顶向下语法分析方法 自底向上优先分析方法 LR分析方法 语法制导翻译和中间代码生成 运行时存储空间分配 代码生成
第二章 文法和语言
文法和语言
• 编译程序研究如何将源语言程序翻译为 目标语言程序; • 让计算机熟悉和掌握源语言和目标语言; • 让计算机掌握语言的语法和语义 • 对语法和语义进行形式化描述 • 文法是对语法进行形式化描述的工具 • 对文法和语言进行形式化定义
n-1=
x
n-1·x
第二章 文法和语言
(5)符号串的集合: 若集合A中的一切元素都是某字母表上的符号 串,则称A为该字母表上的符号串集合。 两个符号串集合A、B乘积定义: AB={xy| x∈A且y∈b} 例:A={a,b},B={c,d} 则AB=
{ac,ad,bc,bd}
第二章 文法和语言
• (6)闭包(∑*) • 字母表∑,用∑* 表示∑上所有有穷长的 串集合,∑*称为∑的闭包。 • 例:字母表∑={0,1} • 则∑*= {ε,0,1,00,01,10,11,000,001,010……} =∑0∪∑1 ∪ ∑2∪. …∪∑n ∪ 长度为1的符号串… 与语言的关系:有的构成单词 句子,有 第二章 文法和语言 的不构成
使用规则:S →01
γ=0,δ=1, , , α=S, β=01
规则: S → 0S1 γ =ε , δ = ε
第二章 文法和语言
文法的概念 推导: 推导: 我是教师
主语〉〈谓语〉 〉〈谓语 〈句子〉 ⇒ 〈主语〉〈谓语〉 句子〉 ⇒ 〈代词〉〈谓语〉 ⇒ 我〈谓语〉 ⇒ 代词〉〈谓语〉 〉〈谓语 谓语〉 我〈动词〉〈直接宾语〉 ⇒我是〈名词〉 动词〉〈直接宾语〉 我是〈名词〉 〉〈直接宾语 ⇒ 我是教师
第二章 文法和语言
第二章 文法和语言
文法G ( 例1 文法 =(VN ,VT ,P,S), , ) 其中 VN={S},VT ={0,1}, , , , P={S → 0S1,S → 01}。 , 。 非终结符集中只含一个元素S; 非终结符集中只含一个元素 ; 终结符集由两个元素0和 组成 组成; 终结符集由两个元素 和1组成; 有两条产生式;开始符号是 。 有两条产生式;开始符号是S。 想:从终结符可推出哪些符号串? 从终结符可推出哪些符号串?
第二章 文法和语言
符号和符号串
先讨论一些有关概念: 1、字母表—符号集:是字母的有穷非空集合。 汉语字母表包括: 汉字、数字、标点符号等 Pascal语言字母表包括: 字母、数字、若干专用符号以及Begin、if等保留 字。
第二章 文法和语言
符号和符号串
2、符号串—字母表的符号组成的任何有穷序列。 例:∑={0,1} — 符号集
答案: = , 答案:S={01,0011,000111,00001111…} , , 描述的语言: 描述的语言:L={0n1n|n≥1}
第二章 文法和语言
例2 文法G =(VN ,VT,P,S) 其中 VN ={标识符,字母,数字} VT= {a,b ,c,…,x,y,z,0,1,…,9}
P = { <标识符 →〈字母〉 标识符> 〈字母〉 标识符 <标识符 → <标识符 字母〉 标识符> 标识符><字母 标识符 标识符 字母〉 <标识符 → <标识符 数字〉 标识符> 标识符><数字 标识符 标识符 数字〉 <字母 →a 字母> 字母 <字母 →b 字母> 字母 …
文法是阐述语法的一个工具
(写出以下语言的文法)
一、文法的概念 描述语言的语法结构的形式规则 “你是大学生” 对 “我大学生是”错 “我是教师”对 “我学习大学生”对
第二章 文法和语言
〈句子〉∷=〈主语〉〈谓语〉 句子〉 〈主语〉 谓语〉 〈主语〉 ∷ =〈代词〉|〈名词〉 主语〉 〈代词〉 〈名词〉 〈代词〉 ∷ = 我|你|他 代词〉 你他 〈名词〉 ∷ = 王明 大学生 教师 英语 王明|大学生 教师|英语 大学生|教师 名词〉 〈谓语〉 ∷ =〈动词〉〈直接宾语〉 谓语〉 〈动词〉 直接宾语〉 〈动词〉 ∷ = 是|学习 动词〉 学习 〈直接宾语〉 ∷ =〈代词〉| <名词 直接宾语〉 〈代词〉 名词> 名词
第二章 文法和语言
文法和语言
• 构造编译程序的算法是从研究源程序及目标程 序产生的,首先找到源语言的形式描述,根据 这种描述,构造出相应的分析加工程序。 • 程序设计语言包括语法和语义两方面。 • 语法是一组规则,可用来产生合乎语法的程序, 也可用来分析一个程序是否合乎语法。 • A:=B+C • 程序设计语言的语义包括静态语义和动态语义。 静态语义是一系列限定规则,用来确定哪些合 乎语法的程序是正确的;动态语义称为运行语 义或执行语义,表示程序要做什么,要计算什 么。
第二章 文法和语言
文法和语言
一、文法的概念 二、符号和符号串 三、文法和语言的定义 四、文法的类型 五、上下文无关文法及其语法树 六、句型的分析 七、有关文法的一些限制
第二章 文法和语言
1.文法的概念
语 言 语法:是一组规则,定义符号如何排 列,排列与符号含义无关。 语义 :研究语法的含义 静态语义 动态语义
第二章 文法和语言
形式语言鸟瞰: 形式语言鸟瞰: 乔姆斯基把文法分为四种类型即0 乔姆斯基把文法分为四种类型即0型、 行强于1 行强于2 1型、2型、3型。0行强于1型,1行强于2 型强于3 型,2型强于3型。这几文法的差别在于 对产生式施加不同的限制。 对产生式施加不同的限制。 我们说G=(V ,ζ 是一个0 我们说G=(VT ,VN ,S ,ζ) 是一个0型 文法, α→β是这样 文法,如果它的每个产生式 α→β是这样 的结构 α∈(V α∈(VN∪VT)* 且至少有一个非终结 β∈(V 符,而β∈(VN∪VT)* 。0型文法也称短语 文法。 文法。
〈7〉正闭包(∑+) ∑+ =∑1 ∪ ∑2∪. …∪∑n ∪ ∑+称∑的正闭包。 显然:∑*= ∑0∪∑+ ∑+
=
∑∑*=∑*∑
第二章 文法和语言
3.文法和语言的形式定义 文法和语言的形式定义
(用以上术语对文法的概念进行形式化) 用以上术语对文法的概念进行形式化) 1、规则(重写规则、产生式、生成式) 形如α→ β 或α ::= β(称:定义为 称 定义为) α 称规则的左部,β称规则的右部。 2、文法的定义 描述语言语法结构的形式规则 〈1〉文法G定义为四元组(VN,VT,P,S)
第二章 文法和语言
其中: VN —— 非终结符号集(语法变量:代表语法范畴) (一般用< > 或大写字母表示) VT —— 终结符号集 (组成语言的基本符号)不能分割 即单词符号 P —— 产生式(规则) S —— 开始符号或称作识别符号,它是一个非终 结符,至少要在一条规则中作为左部出现。 规定:(1)VN ,VT,P是有穷非空集合; (2)VN∩VT=φ (不含公共元素)
<字母 →z 字母> 字母 <数字 →1 数字> 数字 … <数字 →9 } 数字> 数字 S= <标识符 = 标识符 标识符> “< >” 表示非 终结符
第二章 文法和语言
<2> 文法G的第二种表示法: 的第二种表示法: 上例1改为: 上例 改为: G: S → 0S1 改为 S → 01 <3> 文法G的第三种表示法: 的第三种表示法: 上例1改为: G[S]: 上例 改为: 改为 S → 0S1 S → 01 一般约定,第一条产生式的左部是识别(开始) 符号;用尖括号括起来的是非终结符号,不用尖 括号括起来的是终结符号,或者用大写字母表示 非终结符号,小写字母表示终结符号。
第二章 文法和语言
2型文法也称上下文无关文法,注意其语言定 型文法也称上下文无关文法, 义: G的任何产生式为A→β,A∈VN, 的任何产生式为A→β, A→β β∈( β∈(VN∪VT)* 表明凡出现在产生式左边的符号都是非 终结符。 终结符。 型文法也称右线性文法。 3型文法也称右线性文法。3型文法还有另 一种形式,称左线性文法:一个文法G 一种形式,称左线性文A→α 其中α A→Bα 或A→α ,其中α∈VT* , 由于3 A、B ∈ VN 由于3型文法等价于正规式所以也 称正规文法。 称正规文法。
第二章 文法和语言
3、直接推导的定义 、
<1> α → β 是文法 (VN ,VT ,P,S)的规则, 文法G=( 文法 , )的规则, 中的任意符号, 满足: γ和δ是V*中的任意符号,若有符号串 ,W满足: 中的任意符号 若有符号串V, 满足 V= γ α δ,W=γ βδ = δ
则说 V是直接产生 是直接产生W 是直接产生 或 W是V的直接推导 是 的直接推导 直接规约到V 或 W直接规约到 直接规约到 记作 V⇒ W ⇒
第二章 文法和语言
(3)符号串的连接: 设x,y是符号串,连接xy是y符号写在x符号之后。 例:x=ab, y=MN 显然:εx=xε=x εx=xε=x (4)符号串的方幂:
N个
则xy=abMN
设x是符号串,则z=xx……xx,称z为x的方幂, 记z=xn。 因此 x0=ε, x1=x, x2=xx, x3=xxx 显然n>0时, 有xn =x·x
符号串有: 0,1,00,01,10,11 例:∑={a,b,c} — 符号集
符号串有:a,b,c,ab,aaca
第二章 文法和语言
3、符号串的长度:符号串x有m个符号,则长度 就为m,表示|x|=m 如: ababa 则长度是5
4、空符号串:用ε表示,长度为0(不含任何 符号) 若符号串x ,则有εx = xε= x 5、符号串的运算: (1) 符号串的头和尾
编译原理
第一章 第二章 第三章 第四章 第五章 第六章 第七章 第八章 第九章 编译程序引论 文法和语言 词法分析 自顶向下语法分析方法 自底向上优先分析方法 LR分析方法 语法制导翻译和中间代码生成 运行时存储空间分配 代码生成
第二章 文法和语言
文法和语言
• 编译程序研究如何将源语言程序翻译为 目标语言程序; • 让计算机熟悉和掌握源语言和目标语言; • 让计算机掌握语言的语法和语义 • 对语法和语义进行形式化描述 • 文法是对语法进行形式化描述的工具 • 对文法和语言进行形式化定义
n-1=
x
n-1·x
第二章 文法和语言
(5)符号串的集合: 若集合A中的一切元素都是某字母表上的符号 串,则称A为该字母表上的符号串集合。 两个符号串集合A、B乘积定义: AB={xy| x∈A且y∈b} 例:A={a,b},B={c,d} 则AB=
{ac,ad,bc,bd}
第二章 文法和语言
• (6)闭包(∑*) • 字母表∑,用∑* 表示∑上所有有穷长的 串集合,∑*称为∑的闭包。 • 例:字母表∑={0,1} • 则∑*= {ε,0,1,00,01,10,11,000,001,010……} =∑0∪∑1 ∪ ∑2∪. …∪∑n ∪ 长度为1的符号串… 与语言的关系:有的构成单词 句子,有 第二章 文法和语言 的不构成
使用规则:S →01
γ=0,δ=1, , , α=S, β=01
规则: S → 0S1 γ =ε , δ = ε
第二章 文法和语言
文法的概念 推导: 推导: 我是教师
主语〉〈谓语〉 〉〈谓语 〈句子〉 ⇒ 〈主语〉〈谓语〉 句子〉 ⇒ 〈代词〉〈谓语〉 ⇒ 我〈谓语〉 ⇒ 代词〉〈谓语〉 〉〈谓语 谓语〉 我〈动词〉〈直接宾语〉 ⇒我是〈名词〉 动词〉〈直接宾语〉 我是〈名词〉 〉〈直接宾语 ⇒ 我是教师
第二章 文法和语言
第二章 文法和语言
文法G ( 例1 文法 =(VN ,VT ,P,S), , ) 其中 VN={S},VT ={0,1}, , , , P={S → 0S1,S → 01}。 , 。 非终结符集中只含一个元素S; 非终结符集中只含一个元素 ; 终结符集由两个元素0和 组成 组成; 终结符集由两个元素 和1组成; 有两条产生式;开始符号是 。 有两条产生式;开始符号是S。 想:从终结符可推出哪些符号串? 从终结符可推出哪些符号串?
第二章 文法和语言
符号和符号串
先讨论一些有关概念: 1、字母表—符号集:是字母的有穷非空集合。 汉语字母表包括: 汉字、数字、标点符号等 Pascal语言字母表包括: 字母、数字、若干专用符号以及Begin、if等保留 字。
第二章 文法和语言
符号和符号串
2、符号串—字母表的符号组成的任何有穷序列。 例:∑={0,1} — 符号集
答案: = , 答案:S={01,0011,000111,00001111…} , , 描述的语言: 描述的语言:L={0n1n|n≥1}
第二章 文法和语言
例2 文法G =(VN ,VT,P,S) 其中 VN ={标识符,字母,数字} VT= {a,b ,c,…,x,y,z,0,1,…,9}
P = { <标识符 →〈字母〉 标识符> 〈字母〉 标识符 <标识符 → <标识符 字母〉 标识符> 标识符><字母 标识符 标识符 字母〉 <标识符 → <标识符 数字〉 标识符> 标识符><数字 标识符 标识符 数字〉 <字母 →a 字母> 字母 <字母 →b 字母> 字母 …
文法是阐述语法的一个工具
(写出以下语言的文法)
一、文法的概念 描述语言的语法结构的形式规则 “你是大学生” 对 “我大学生是”错 “我是教师”对 “我学习大学生”对
第二章 文法和语言
〈句子〉∷=〈主语〉〈谓语〉 句子〉 〈主语〉 谓语〉 〈主语〉 ∷ =〈代词〉|〈名词〉 主语〉 〈代词〉 〈名词〉 〈代词〉 ∷ = 我|你|他 代词〉 你他 〈名词〉 ∷ = 王明 大学生 教师 英语 王明|大学生 教师|英语 大学生|教师 名词〉 〈谓语〉 ∷ =〈动词〉〈直接宾语〉 谓语〉 〈动词〉 直接宾语〉 〈动词〉 ∷ = 是|学习 动词〉 学习 〈直接宾语〉 ∷ =〈代词〉| <名词 直接宾语〉 〈代词〉 名词> 名词
第二章 文法和语言
文法和语言
• 构造编译程序的算法是从研究源程序及目标程 序产生的,首先找到源语言的形式描述,根据 这种描述,构造出相应的分析加工程序。 • 程序设计语言包括语法和语义两方面。 • 语法是一组规则,可用来产生合乎语法的程序, 也可用来分析一个程序是否合乎语法。 • A:=B+C • 程序设计语言的语义包括静态语义和动态语义。 静态语义是一系列限定规则,用来确定哪些合 乎语法的程序是正确的;动态语义称为运行语 义或执行语义,表示程序要做什么,要计算什 么。
第二章 文法和语言
文法和语言
一、文法的概念 二、符号和符号串 三、文法和语言的定义 四、文法的类型 五、上下文无关文法及其语法树 六、句型的分析 七、有关文法的一些限制
第二章 文法和语言
1.文法的概念
语 言 语法:是一组规则,定义符号如何排 列,排列与符号含义无关。 语义 :研究语法的含义 静态语义 动态语义
第二章 文法和语言
形式语言鸟瞰: 形式语言鸟瞰: 乔姆斯基把文法分为四种类型即0 乔姆斯基把文法分为四种类型即0型、 行强于1 行强于2 1型、2型、3型。0行强于1型,1行强于2 型强于3 型,2型强于3型。这几文法的差别在于 对产生式施加不同的限制。 对产生式施加不同的限制。 我们说G=(V ,ζ 是一个0 我们说G=(VT ,VN ,S ,ζ) 是一个0型 文法, α→β是这样 文法,如果它的每个产生式 α→β是这样 的结构 α∈(V α∈(VN∪VT)* 且至少有一个非终结 β∈(V 符,而β∈(VN∪VT)* 。0型文法也称短语 文法。 文法。
〈7〉正闭包(∑+) ∑+ =∑1 ∪ ∑2∪. …∪∑n ∪ ∑+称∑的正闭包。 显然:∑*= ∑0∪∑+ ∑+
=
∑∑*=∑*∑
第二章 文法和语言
3.文法和语言的形式定义 文法和语言的形式定义
(用以上术语对文法的概念进行形式化) 用以上术语对文法的概念进行形式化) 1、规则(重写规则、产生式、生成式) 形如α→ β 或α ::= β(称:定义为 称 定义为) α 称规则的左部,β称规则的右部。 2、文法的定义 描述语言语法结构的形式规则 〈1〉文法G定义为四元组(VN,VT,P,S)
第二章 文法和语言
其中: VN —— 非终结符号集(语法变量:代表语法范畴) (一般用< > 或大写字母表示) VT —— 终结符号集 (组成语言的基本符号)不能分割 即单词符号 P —— 产生式(规则) S —— 开始符号或称作识别符号,它是一个非终 结符,至少要在一条规则中作为左部出现。 规定:(1)VN ,VT,P是有穷非空集合; (2)VN∩VT=φ (不含公共元素)