编译原理36.ppt
合集下载
编译原理ppt课件
源程序
编译 程序
目标 程序
19 PPT课件整理
20 PPT课件整理
❖ 编译程序又可根据用途和侧重点的不同, 进一步分类为:
①诊断编译程序(Diagnostic Compiler)
专门用于帮助程序开发和调试的编译程序 ②优化编译程序(Optimizing Compiler)
着重于提高目标代码效率的编译程序 ③交叉编译程序(Cross Compiler)
❖ 该课程涉及多门课程的内容综合运用,涉及面广,
内容庞杂,学习艰难
程序设计语言、计算机体系结构、语言理论及算法等 数据结构、离散数学
❖ 该课程涉及的原理、方法和技术具有十分普遍的意 义
每一个计算机科学与技术工作者的职业生涯中反复用到, “享用一辈子”
这儿接受的训练很难在其他地方获得,如:抽象与形式 化方法、局部与全局优化方法、构造技术、证明方法等
能够产生不同于其宿主机机器代码的编译程序 ④可变目标编译程序(Retargetable complier)
无须重写与机器无关部分就能改变目标机的 编译程序
21 PPT课件整理
二、与编译程序相关的程序
本讲义只介绍编译程序(器)构造的基本原
理、方法与技术,但在一个完整的语言开发
(或称程序设计)环境中,除了编译器这一
2. 理论联系实际——亲自动手,构造一个 演示性编译程序,至少要完成扫描器和 语法分析器,以及语法制导翻译产生中 间代码(课程设 特别要下功夫认真学习如何从实际问题 进行抽象并形式化,最终建立实际问题 的模型(上升为理性认识),并借助模 型进一步设计实现,这将对你能力的提 高大有益处
主要工具外,还需要其他一些工具,如编辑
器、连接器、装入程序等。现代计算机系统
《编译原理》幻灯片
文法和语言
➢怎样理解四种文法之间的关系?
➢
四种文法之间的关系是对产生式逐
步做更多的限制而定义的。为此,它们所
定义语言之间的关系依次是:有不是上下
文有关语言的0型语言,有不是上下文无关
语言的1型语言,有不是正那么语言的上下
文无关语言
编译原理 计算机学院 李金厚
几个理论共识
➢结论1:0型文法(短语构造文法)的能力相 当于图灵机,可以表征任何递归可枚举集, 而且任何0型语言都是递归可枚举的
➢
L(G)= {0n1n|n≥1}集合表示形式
编译原理 计算机学院 李金厚
文法、语言和句子
➢ 例 文法G[S]: ➢ ➢ ➢ ➢ ➢ ➢ ➢
〔1〕S→aSBE 〔2〕S→aBE 〔3〕EB→BE 〔4〕aB→ab 〔5〕bB→bb 〔6〕bE→be 〔7〕eE→ee
L(G)={ anbnen | n≥1 }
➢
要对程序设计语言给出准确无二义的语
法描述,严谨、简洁、易读
➢ 形式化工具
➢ “形式化〞是指这样的事实:语言的所有规那 么只以什麽符号串能出现的方式来陈述,形式化 很像是数学的符号化
编译原理 计算机学院 李金厚
文法的直观概念
➢ 以自然语言为例,人们罗列出所有的句子,但人 们可以给出一些规那么,用它们来说明或定义句 子合理的组成构造
➢ 通过观察可以知道,上述文法定义的句子是用符 号a,+,*,( 以及 )构成的算术表达式
编译原理 计算机学院 李金厚
语言、文法和句子
➢例,由文法G生成的语言记为L(G),它是文 法G的一切句子的集合: L(G)={x|S * x,其中S为文法的开场符 号,且x ∈VT*}
➢
《编译原理》教学课件
过程
4. 使学生在系统级上认识算法和系统的设计,培养系统 能力
2021/8/3
7
主要内容
1. 引论 2. 高级语言及其文法 3. 词法分析 4. 自顶向下的语法分析 5. 自底向上的语法分析 6. 语法制导翻译与属性文法 7. 语义分析与中间代码生成 8. 符号表管理 9. 运行时的存储组织 10. 代码优化 11. 代码生成
22
1、词法分析
• 词法分析由词法分析器(Lexical Analyzer)完 成,词法分析器又称为扫描器(Scanner)
• 词法分析器从左到右扫描组成源程序的字符 串,并将其转换成单词(记号—token)串;同 时要:查词法错误,进行标识符登记——符 号表管理
• 输入:字符串
• 输出:(种别码,属性值)——序对 – 属性值——token的机内表示
2021/8/3
6
课程目的和基本要求
• 知识
– 掌握编译程序的总体结构、编译程序各个组成部分的 任务、编译过程各个阶段的工作原理 、编译过程各 个阶段所要解决的问题及其采用的方法和技术
• 能力
1. 掌握程序变换基本概念、问题描述和处理方法 2. 增强理论结合实际能力 3. 修养“问题、形式化描述、计算机化” 的问题求解
2021/8/3
2
使用说明
• 编译原理课程是计算机专业教育很重要的专业技 术基础课,更多地体现在其所含的学生终生受用 的计算机问题求解的典型思想和方法,所含的知 识是载体,利用好这个载体,还靠大家努力
• 课程教学是与教师和学生紧密相关的,甚至可以 说大纲、教材只是一个框架和素材,课堂教学这 部剧如何展开,还依赖于集导演和演员于一身的 教师,讲课PPT的制作是必不可少的“排练工作” 之一
4. 使学生在系统级上认识算法和系统的设计,培养系统 能力
2021/8/3
7
主要内容
1. 引论 2. 高级语言及其文法 3. 词法分析 4. 自顶向下的语法分析 5. 自底向上的语法分析 6. 语法制导翻译与属性文法 7. 语义分析与中间代码生成 8. 符号表管理 9. 运行时的存储组织 10. 代码优化 11. 代码生成
22
1、词法分析
• 词法分析由词法分析器(Lexical Analyzer)完 成,词法分析器又称为扫描器(Scanner)
• 词法分析器从左到右扫描组成源程序的字符 串,并将其转换成单词(记号—token)串;同 时要:查词法错误,进行标识符登记——符 号表管理
• 输入:字符串
• 输出:(种别码,属性值)——序对 – 属性值——token的机内表示
2021/8/3
6
课程目的和基本要求
• 知识
– 掌握编译程序的总体结构、编译程序各个组成部分的 任务、编译过程各个阶段的工作原理 、编译过程各 个阶段所要解决的问题及其采用的方法和技术
• 能力
1. 掌握程序变换基本概念、问题描述和处理方法 2. 增强理论结合实际能力 3. 修养“问题、形式化描述、计算机化” 的问题求解
2021/8/3
2
使用说明
• 编译原理课程是计算机专业教育很重要的专业技 术基础课,更多地体现在其所含的学生终生受用 的计算机问题求解的典型思想和方法,所含的知 识是载体,利用好这个载体,还靠大家努力
• 课程教学是与教师和学生紧密相关的,甚至可以 说大纲、教材只是一个框架和素材,课堂教学这 部剧如何展开,还依赖于集导演和演员于一身的 教师,讲课PPT的制作是必不可少的“排练工作” 之一
《编译原理》课件
代码生成
编译器可以将高级语言编写的源代码转换成机器语言或低级语言,以便在特定的硬件平台上运行。编 译器还可以生成可执行文件或动态链接库等二进制文件。
编译器在人工智能领域的应用
机器学习编译器
机器学习编译器可以将机器学习模型转换成可执行代码,以便在嵌入式设备或边缘计算 设备上运行。这种编译器可以优化模型的计算性能和内存占用,提高模型的运行效率。
3
缺点
对于某些复杂文法,可能导致大量的无用推导和 状态爆炸。
自底向上的语法分析
分析步骤
从输入符号序列的最后一个符号开始,逐步向上构建语法树,直 到找到与文法中的某个产生式右部匹配的符号串。
优点
可以充分利用已知信息,避免不必要的推导和状态爆炸。
缺点
对于某些复杂文法,可能导致大量的无用归约和状态爆炸。
04
中间代码生成
中间代码生成的定义和任务
定义
中间代码生成是编译器的一个阶段,将源代码转换成中间代码的过程。
任务
将源代码转换成一种中间表示形式,以便进行后续的优化和目标代码生成。
三地址代码的生成
01
三地址代码是一种中间代码形 式,由一系列的三元式组成。
02
三元式的形式为(op, arg1, arg2),表示执行一个操作(op) 并产生一个结果,操作数arg1 和arg2来自寄存器、常数或之 前的计算结果。
语义分析
检查AST是否有语义错误,如类型错 误、未定义的变量等。
中间代码生成
将AST转换为中间代码,通常是三地 址代码。
代码优化
对中间代码进行优化,提高执行效 率。
代码生成
将中间代码转换为机器语言代码, 能够在特定硬件上执行。
编译器的分类
编译器可以将高级语言编写的源代码转换成机器语言或低级语言,以便在特定的硬件平台上运行。编 译器还可以生成可执行文件或动态链接库等二进制文件。
编译器在人工智能领域的应用
机器学习编译器
机器学习编译器可以将机器学习模型转换成可执行代码,以便在嵌入式设备或边缘计算 设备上运行。这种编译器可以优化模型的计算性能和内存占用,提高模型的运行效率。
3
缺点
对于某些复杂文法,可能导致大量的无用推导和 状态爆炸。
自底向上的语法分析
分析步骤
从输入符号序列的最后一个符号开始,逐步向上构建语法树,直 到找到与文法中的某个产生式右部匹配的符号串。
优点
可以充分利用已知信息,避免不必要的推导和状态爆炸。
缺点
对于某些复杂文法,可能导致大量的无用归约和状态爆炸。
04
中间代码生成
中间代码生成的定义和任务
定义
中间代码生成是编译器的一个阶段,将源代码转换成中间代码的过程。
任务
将源代码转换成一种中间表示形式,以便进行后续的优化和目标代码生成。
三地址代码的生成
01
三地址代码是一种中间代码形 式,由一系列的三元式组成。
02
三元式的形式为(op, arg1, arg2),表示执行一个操作(op) 并产生一个结果,操作数arg1 和arg2来自寄存器、常数或之 前的计算结果。
语义分析
检查AST是否有语义错误,如类型错 误、未定义的变量等。
中间代码生成
将AST转换为中间代码,通常是三地 址代码。
代码优化
对中间代码进行优化,提高执行效 率。
代码生成
将中间代码转换为机器语言代码, 能够在特定硬件上执行。
编译器的分类
编译原理精选版演示课件.ppt
预测分析表
3
表驱动的预测分析程序模型
khk
4
实现步骤:
(1) 判断文法是否为LL(1)文法。 如果文法中含有左递归,必须先消除 左递归
(2)构造预测分析表 : Select(A ) (3)列出预测分析过程
khk
5
第6章:自底向上分析方法
自底向上分析方法,也称移进归约分析法
实现思想(是推导的逆过程):
对输入符号串自左向右进行扫描,并将输入符逐个 移入一个后进先出栈中,边移入边分析,一旦栈顶 符号串形成某个句型的可归约串时,就用该产生式 的左部非终结符代替相应右部的文法符号串,称为 归约。重复这一过程,直到归约到栈中只剩下文法 的开始符号时,则分析成功。
关键问题
khk
6
移进—规约分析(Shift-reduce parsing)
+
A a
可得 b <. a
由A→( B 且B+ ( B… 可得 (<. (
+
B aa…
可得 (<. a
+
B Aa )
可得 (<. A
khk
18
A(B(Aa) …)
(3) 求> .关系:
A(B…B
+
Aa
由S→bAb,且A…) 可得 ) > . b
A+…B 可得 B > . b
khk
88
例1:文法
SaAcBe A b A Ab B d
输入串abbcde#分析
khk
9
归约分析过程(移进归约):
步骤 1 2 3 4 5 6 7 8 9 10 1kh1k
符号栈 # #a #ab #aA #aAb #aA #aAc #aAcd #aAcB #aAcBe #S
编译原理 PPT学习教案
a
开始 0 a
1b
2
b 第11页/共130页
12
正规文法形式: A→a或A→Ba(左线性)或A→aB(右 线
性)其中:A,B∈Vn, a∈Vt 正规文法描述语言单词,状态转换图可识别单词,它们 之间存在等价关系。
一.对于右线性文法构造状态转换图 设G=(Vn,Vt,P,S)是一右线性文法,Vn中的每个非终结符 号对应状态图中的一个结点,且G的开始符号S所标记的 结点为初态结点; 增设一个不属于V的符号F标记终态结点。 |VN|=k,共有k+1个节点(状态)。
27
例:设有正则文法G[S]: S→U0|V1 U→S1|1 V→S0|0 画出该文法对应的状态图。
1
R
0
1
V
0
图3.5 状态图
U
10
S
例:对句子0110进行的分析。
首先,在开始状态R下扫描的第一个符号是0,转到状态 V,表示0是句柄,归约到V。接下来,在状态V扫描1, 转到状态S,此时句柄为V1,归约成S。再往下扫描1,由 状态S转到状态U,表示句柄为S1归约为U。最后,扫描0 ,转到状态S,此时句柄为U0,归约为S,
第13页/共130页
14
例如:文法G[S]
S→aU|bV
U→bV|a
V→aU|b
a
U
S b
b V
第14页/共130页
a
a Q
b
15
G[S]:
S→aA|bB
A→bB|aD|a
B→aA|bD|ba NhomakorabeaA
a
D→aD|bD|a|b
a
S
ba
a
bB
D
b
b
开始 0 a
1b
2
b 第11页/共130页
12
正规文法形式: A→a或A→Ba(左线性)或A→aB(右 线
性)其中:A,B∈Vn, a∈Vt 正规文法描述语言单词,状态转换图可识别单词,它们 之间存在等价关系。
一.对于右线性文法构造状态转换图 设G=(Vn,Vt,P,S)是一右线性文法,Vn中的每个非终结符 号对应状态图中的一个结点,且G的开始符号S所标记的 结点为初态结点; 增设一个不属于V的符号F标记终态结点。 |VN|=k,共有k+1个节点(状态)。
27
例:设有正则文法G[S]: S→U0|V1 U→S1|1 V→S0|0 画出该文法对应的状态图。
1
R
0
1
V
0
图3.5 状态图
U
10
S
例:对句子0110进行的分析。
首先,在开始状态R下扫描的第一个符号是0,转到状态 V,表示0是句柄,归约到V。接下来,在状态V扫描1, 转到状态S,此时句柄为V1,归约成S。再往下扫描1,由 状态S转到状态U,表示句柄为S1归约为U。最后,扫描0 ,转到状态S,此时句柄为U0,归约为S,
第13页/共130页
14
例如:文法G[S]
S→aU|bV
U→bV|a
V→aU|b
a
U
S b
b V
第14页/共130页
a
a Q
b
15
G[S]:
S→aA|bB
A→bB|aD|a
B→aA|bD|ba NhomakorabeaA
a
D→aD|bD|a|b
a
S
ba
a
bB
D
b
b
编译原理
条件 condition
expression
term
factor
编 译 程 序 总 体 流 程 图
启动 置初值
调用GETSYM取单词 调用GETSYM取单词 GETSYM 调用BLOCK过程 调用BLOCK过程 BLOCK
当前单词 是否为源程序结束符 '.'? Y 源程序 是否 错 ? N 过程 NTE ET 程序 Y
1 《编译原理》 台州学院 应建健
何为PL/0语言? 何为PL/0语言? PL/0语言
PL/0语言:PASCAL语言的子集,功能简单, PL/0语言:PASCAL语言的子集,功能简单, 语言 语言的子集 结构清晰,可读性强, 结构清晰,可读性强,具备了一般高级语 言的必备部分
2
《编译原理》 台州学院 应建健
N
出错
错
调用
结束 21
说明部分的分析 对每个过程说明的对象(变量, 对每个过程说明的对象(变量,常量和过 程)造名字表
–填写所在层次,标识符的属性和分配的相对位 填写所在层次, 填写所在层次 标识符的属性不同时, 置。标识符的属性不同时,所需填入的信息也 不同。登录信息由ENTER过程完成。 ENTER过程完成 不同。登录信息由ENTER过程完成。
12
《编译原理》 台州学院 应建健
PL/0编译程序的结构 PL/0编译程序的结构
其编译过程采用一趟扫描方式 其编译过程采用一趟扫描 一趟扫描方式 语法分析程序为核心 以语法分析程序为核心 词法分析程序和代码生成程序都作为一 程序和代码生成 词法分析程序和代码生成程序都作为一 个独立的过程, 个独立的过程,当语法分析需要读单词 时就调用词法分析程序, 时就调用词法分析程序,而当语法分析 正确需要生成相应的目标代码时, 正确需要生成相应的目标代码时,则调 用代码生成程序。 用代码生成程序。
《编译原理》课件
了解中间代码生成的概念和它在编译过程中的角色。 学习四元式和三地址码的表示和生成方式,以及中间代码优化的技巧。
六、代码生成
了解目标机器的指令系统和存储结构,以及它们对代码生成的影响。 学习寄存器分配和目标代码生成的基本原理和方法。
七、附录
参考文献提供了进一步学习编译原理的资源。 课程总结将回顾课程中学到的重要知识,并概述关键概念和技术。 问题解答将回答学生在课程学习中提出的问题。 课程评价将收集学生对课程的反馈和评价,以便对将来的课程进行改进。
《编译原理》PPT课件
编译原理PPT课件将带您深入了解编译原理的重要概念和技术。这个课程介绍 了编译原理的意义以及编译过程的概述。
一、引言
课程介绍编译原理的重要性,让您理解为什么编译原理对于软件开发非常关 键。 编译过程的概述将带您了解传统的编译过程中涉及的各个阶段和任务。
二、词法分析
词法分析是编译过程中的第一步,了解词法分析的作用以及它在编译器中的 实现。 掌握正则表达式和有限自动机的概念,这些是实现词法分骤,理解它的作用和不同的语法分析方法。 学习上下文无关文法以及LL(1)语法分析器和LR(1)语法分析器的实现原理。
四、语义分析
语义分析是编译过程中的重要一环,了解它的作用和涉及的任务。 学习语义动作、符号表管理和类型检查,以及如何进行语法制导翻译。
五、中间代码生成
六、代码生成
了解目标机器的指令系统和存储结构,以及它们对代码生成的影响。 学习寄存器分配和目标代码生成的基本原理和方法。
七、附录
参考文献提供了进一步学习编译原理的资源。 课程总结将回顾课程中学到的重要知识,并概述关键概念和技术。 问题解答将回答学生在课程学习中提出的问题。 课程评价将收集学生对课程的反馈和评价,以便对将来的课程进行改进。
《编译原理》PPT课件
编译原理PPT课件将带您深入了解编译原理的重要概念和技术。这个课程介绍 了编译原理的意义以及编译过程的概述。
一、引言
课程介绍编译原理的重要性,让您理解为什么编译原理对于软件开发非常关 键。 编译过程的概述将带您了解传统的编译过程中涉及的各个阶段和任务。
二、词法分析
词法分析是编译过程中的第一步,了解词法分析的作用以及它在编译器中的 实现。 掌握正则表达式和有限自动机的概念,这些是实现词法分骤,理解它的作用和不同的语法分析方法。 学习上下文无关文法以及LL(1)语法分析器和LR(1)语法分析器的实现原理。
四、语义分析
语义分析是编译过程中的重要一环,了解它的作用和涉及的任务。 学习语义动作、符号表管理和类型检查,以及如何进行语法制导翻译。
五、中间代码生成
编译原理PPT课件
字符串 表示的 字符
词 法 单词符号 分
语 法 分
源程序
析 取下一个 析 器 单词符号 器
0
l
d /
:
;
其它
l|d
01
非d
2
非l
d
03
非d
4
5 6
7
8
9
10
11
非和
非
12
13
14
非
15
16
17
2.语法分析
2.1 任务: –在词法分析的基础上,根据语言的语法规则, 逐一分析词法分析时得到的属性字,检查语法 错误,若没有错误,则给出正确的语法结构 (如短语、子句、句子、程序段、程序等)。
• 提取公共左因子:
假定关于A的规则是 A→ 1 | 2 | …| n | 1 | 2 | … | m (其中,每个 不以开头)
那么,可以把这些规则改写成
A→A | 1 | 2 | … | m A→ 1 | 2 | … | n
• 经过反复提取左因子,就能够把每个非终 结符(包括新引进者)的所有候选首符集变成 为两两不相交。
编译原理
• 概论 • 词法分析 • 语法分析 • 语义分析 • 中间代码生成 • 优化 • 目标代码生成
一. 概论
1.1 翻译程序
源程序
翻译程序
目标程序
汇编程序:源语言为汇编语言,目标语言为
翻
机器语言
译 编译程序:源语言为高级语言,目标语言为
程
某台计算机上的汇编语言或机器 语言
序 解释程序:能够按源程序的动态顺序逐句进
行分析解释,根据语句功能翻译
成与该语句相应的机器指令序
列,并立即执行,直至结束。
《编译原理课件》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. 使用编译程序自动生成工具构造
使用高级语言作工具构造编译程序可以大大节 省程序设计的时间,并且编译程序易于阅读、 维护和移植。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
正则表达式可以对token进行表示
用正则表达式对token进行描述,而后可以很方便有 效的执行(使用DFA)
不能够使用正则表达式来描述程序语言的语法:
原因:正则表达式没有足够的描述能力来描述程序 语言的语法。 例如:嵌套的等价结构
比如括号嵌套
{ (), ()(), (()), (())(), ()(()), (())(()), ((())(())), etc. }
通过调用的惯例,我们可以这么说: G是产生式S → aSbS | ε的文法。从调用惯例中,我 们可以推断出终结符、非终结符和开始符号。
2020/11/13
编译原理
13
推导
设G = <V,Σ,S,→>,是一个上下文无关文法,“直接的推 导”关系 (⇒) 定义为 { <αAγ, αβγ> | A→β }. 例如:
语法分析——上下文无关文法
授课:胡静
目录
上下文无关文法(CFGs) 推导 语法分析树和抽象语法 二义性文法
2020/11/13
编译原理
2
语法分析器所处的法分析的例子
2020/11/13
编译原理
4
语法分析的类比
针对自然语言的语法分析:
识别一个句子是不是符合语法规范&识别每一个成分 的功能。
也就是说,属于L(G)
2020/11/13
编译原理
16
文法和接受器
上下文无关文法的接受器如下:
语法分析器 = CFG接受器,当token流被接受时,输 出相应的推导
例子: LL(k), LR(k), SLR, LALR
2020/11/13
编译原理
17
每个正则语言都是CFL
为每个RE归纳的建立一个CFG
2020/11/13
编译原理
7
先决条件:语言的理论
设Σ是一个有限的符号集合,叫做字母表 Σ* 表示由Σ中的符号组成的所有有限字符串的集 合。 ε表示空字符串。 任意子集L ⊆ Σ* 叫做语言。
2020/11/13
编译原理
8
先决条件:二元关系
如果S1和S2是集合,S1× S2是它们的笛卡尔积,用 集合表示为:{ <s1,s2> | s1 ∈ S1 and s2 ∈ S2} 将S×S 记作 S2 如果S1和S2是集合,那么集合R ⊆ S1× S2 称为S1和 S2的二元关系 如果 <s1,s2> ∈ R,就记作s1Rs2
A 是产生式的左边(lefthand side,LHS) α是产生式的右边( righthand side, RHS)
A→α1|…|αn 表示产生式 A→ α1 ,…, A→ αn
2020/11/13
编译原理
12
简单的文法
<V,Σ,S,→>,其中
V 是 { S },也就是说,只有一个非终结符S Σ 是 { a, b },也就是说,有两个终结符 “a”和“b” → 是 {<S,aSbS>, <S,ε>},也就是说,有两个产生式 S→aSbS和 S→ε
2020/11/13
编译原理
10
上下文无关文法
上下文无关文法是一个四元组表示形式 <V,Σ,S,→>
V是非终结符的有限集合 Σ是终结符的有限集合 S ∈ V 是一个特殊的非终结符,叫做开始符号 →⊆ V × (V ∪ Σ)* 是一个有限关系,叫做产生式。
上下文无关文法简写为 CFG
2020/11/13
2020/11/13
编译原理
5
语法分析总述
达到的目标:确定输入的token流是否符合程序的语 法,如果符合的话,要识别出其结构。 语法分析需要如下条件:
对语法进行描述的方法 一个接受器的机制,来确定输入的token流是否符合 语法描述。 能够还原语法结构的方法。
2020/11/13
编译原理
6
为什么不能用正则表达式
ε
S→ε
a
S→a
R1R2
S → S1S2
R1 | R2
S → S1 | S2
R1 *
其中:
S → S1 S | ε
G1 = 是R1的文法,以符号S1作为开始符号 G2 = 是 R2的文法,以符号S2作为开始符号
2020/11/13
编译原理
18
求和的文法
文法:
S→E+S|E E → number | ( S )
如, α果1 , x...∈, αLn=(Gx,),其那中么每x一的个推α导i ⇒是α一i+1个当字0≤符i<串n。序我列们S写=α0 作α0⇒α1 ... ⇒ αn。
2020/11/13
编译原理
15
举例
设有文法G,其产生式是S → aSbS | ε 那么
S ⇒ aSbS ⇒ aaSbSbS ⇒ aabSbS ⇒ aabbS ⇒ aabbaSbS ⇒aabbabS ⇒ aabbab
编译原理
11
更多的概念和一些约定
A, B, C, … 用来表示非终结符 a, b, c, … 表示终结符 …, X, Y, Z 可以用来表示终结符或者非终结符 …, w, x, y, z 表示终结符号串 α, β, γ, δ, … 表示由终结符或非终结符构成的符号串 A→α表示产生式<A,α> 在产生式A→α中,
2020/11/13
编译原理
9
先决条件:幂和闭包
如果R1和R2是关系,那么R1 • R2 ,称为R1和R2关系 的组合表示为{ <x,z> | <x,y> ∈ R1 and <y,z> ∈ R2 } 如果R是S×S中的关系,那么
R2是R•R For i>2, Ri = R • Ri-1
R1=R; R0 = { <x,x> | x ∈ S },这是S上的恒等关系 R+ =R1 ∪ R2 ∪ R3 ∪ …, 这是R上的传递闭包 R* =R0 ∪ R+,这是R上的传递自反闭包
上下文无关语言
设G = <V,Σ,S,→>是CFG,由G所产生的语言表示为 L(G), L(G) = { x | S ⇒* x }
L(G) = 从开始符号开始,将产生式作为规则改写的 手段,重复的使用,最后得到的终结符号串的集合, 叫做L(G)。
上下文无关语言(CFLs)是由上下文无关文法产生的语 言。
设G的文法的产生式是 S → aSbS | ε 那么
S ⇒ aSbS aSbS ⇒ aaSbSbS aaSbSbS ⇒ aabSbS aabSbS ⇒ aabbS aabbS ⇒ aabbaSbS aabbaSbS ⇒ aabbabS aabbabS ⇒ aabbab
2020/11/13
编译原理
14