编译原理PPT课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

字符串 表示的 字符
词 法 单词符号 分
语 法 分
源程序
析 取下一个 析 器 单词符号 器
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 翻译程序
源程序
翻译程序
目标程序
汇编程序:源语言为汇编语言,目标语言为

机器语言
译 编译程序:源语言为高级语言,目标语言为

某台计算机上的汇编语言或机器 语言
序 解释程序:能够按源程序的动态顺序逐句进
行分析解释,根据语句功能翻译
成与该语句相应的机器指令序
列,并立即执行,直至结束。
1.2 源程序执行的途径(编译途径、解
释途径)
• 编译途径即是将一份源程序从头至尾翻译成某台 计算机上的机器语言表示的目标程序,然后执行 该目标程序得到运行结果,并允许重复执行若干 次。
• 编译的转换过程
–两阶段转换:编译——运行
2.2 语法规则: –语言的规则,又称为文法;规定单词如何构成 短语、语句、过程和程序。
2.3 语法分析的方法
2.3.1自下而上分析法(Bottom-up) • 基本思想:从输入串开始,逐步进行“归约 ”,直到文法的开始符号。即从树末端开始 ,构造语法树。所谓归约,是指根据文法的 产生式规则,把产生式的右部替换成左部符 号。 • 算符优先分析法:按照算符的优先关系和结 合性质进行语法分析。适合分析表达式。 • LR分析法:规范归约
• 预测分析程序
优点:直观、简单和宜于手工实现。
• 自上而下分析面临的问题
– 要消除文法的左递归性
– 克服回溯 例:下列文法含有直接左递归:
S→Sa
ห้องสมุดไป่ตู้
S→ b
n
所能产生的语言L = { b a n | n 0 },对输入串
baaaa#是该语言的句子,但用自顶向下分析时可
看出当输入符为b时,为与b匹配应选用S→b来推
优 化

标 代
目标代码



出错处理
二.词法分析
2.1 任务 –输入源程序,对构成源程序的字符串进行扫描 和分解,识别出一个个的单词及其有关属性, 并转换成属性字,这也就是词法分析的输出。
2.2 单词 –是高级语言中有实在意义的最小语法单位,它 由字符构成。
2.3 属性字 – 指单词的一种机内表示
• 当用高级语言编写的源程序输入计算机后,键入 运行程序命令,则解释程序就对源程序逐条翻译, 翻译一条立即执行一条。该途径不产生目标代码 程序,故占用内存较少,但执行速度要慢些。
初始数据
源程序
解释程序
结果
1.4 编译程序的结构
表格管理
词 源程序 法
分 析 器
语 法 分 析 器
语 义 分 析 器
中 间 代 码 生 成
G(E): E i| E+E | E-E | E*E | E/E | (E) i*i+i E*i+i E*E+i E+i E+E E
E
E+ E E*E i
i
i
2.3.2 自上而下分析法(Top-down)
• 基本思想:它从文法的开始符号出发,反复 使用各种产生式,寻找"匹配"的推导。
• 递归下降分析法:对每一语法变量(非终结 符)构造一个相应的子程序,每个子程序识 别一定的语法单位,通过子程序间的信息反 馈和联合作用实现对输入串的识别。
标运
源 程 序
编 译 程 序
目 标 代 码
初 始 数 据
代行 码子
程 序 目
计 算 结 果
编译时
运行时
1.2 源程序执行的途径(编译途径、解 释途径)
• 解释途径即是对于源程序的一个语句,把它翻译 成相应的机器语言,并让计算机立即执行。如果 需要数据时,则提示用户输入初始数据,并立即 进行处理。解释途径就是边解释边执行,直至源 程序动态处理完毕为止。
A→X1︱ X2︱…︱ Xn Select(A→Xi)∩Select(A→Xj)=(空集)(i≠j)
FIRST集合定义
• 令G是一个不含左递归的文法,对G的所有非终结
符的每个候选定义它的终结首符集FIRST()为:
2.4 LL(1)文法的判断
当需要选用自顶向下分析技术时,首先必须判 别所给文法是否是LL(1)文法。因而我们对任给文 法需计算FIRST,FOLLOW,SELECT集合,进而判 别文法是否为LL(1)文法。
实质: 对于文法G[S],其每个非终结符号的不同 规则具有不相交的可选集Select,则称该 文法为LL(1)文法.
单词类别 单词属性值
• 2.4 词法分析程序与语法分析程序的接口方式
词法分析程序是编译第一阶段的工作。词法分 析工作可以是独立的一遍,把字符流的源程序变 为单词序列,输出在一个中间文件上,这个文件 做为语法分析程序的输入而继续编译过程。
而更一般的情况,常将词法分析程序设计成一 个子程序,每当语法分析程序需要一个单词时, 则调用该子程序。词法程序每得到一次调用,便 从源程序文件中赌徒一些字符,直到识别出一个 单词,或者直到下一单词的第一个字符为止。这 中设计方案中,词法分析程序和语法分析程序放 在同一遍里,而省掉了中间文件。
导,这样就推不出后面部分,若用S→Sa则无法
确定到什么时候才用S→b替换。
左递归的消除
• 对上例的直接左递归可改写为右递归,如 对上例的文法可改写为:
S bS'
S' aS' |
改写后的文法和原文法产生的语言相同。
回溯的消除
• 为了消除回溯就必须保证:对文法的任何 非终结符,当要它去匹配输入串时,能够 根据它所面临的输入符号准确地指派它的 一个候选去执行任务,并且此候选的工作 结果应是确信无疑的。
相关文档
最新文档