编译原理复习要点(打印版)

3.0 文小白 2023-09-15 402 0 113.5KB 3 页 10文币
侵权投诉
翻译程序有这样的一个程序,它把用
汇编语言或高级语言编写的程序转换
等价的机器语言程序,我们把这种执
转换功能的程序统称为翻译程序。
编译:高级语言的翻译程序称为编译
序。
编译程序输入对象称为源程序,
对象称为目标程序。
编译程序支持的源程序的执行分两个
阶段:编译阶段,运行阶段。
编译阶段对整个源程序进行分析,翻
译成等价的目标程序,翻译的同时做
法检查和语义检查,凡是有错误的源
序均指出其错误。运行阶段在运行子程序
的支持下执行目标程序。运行子程序是为
了支持目标程序的运行而开发的程序。
编译程序的功能结构
词法分析:扫描程序的 ASCII 码序列,识
别出一个个具有独立意义的最小语法
位,并把每个单词的 ASCII 码序列替换为
所谓的 token 形式。
语法分析根据程序设计语言的语法规
则,把词法分析的结果分解陈各种语
单位,同时检查程序中的语法错误。
语义分析对语法分析所识别出的各类
语法范畴,分析其含义,并进行静态
义检查。
中间代码生成上述过程后,有些编译
程序将程序变成一种内部表示形式,
种表示形式叫做中间代码
中间代码 对前阶段产生的中间代
码在不改变源程序的前提下进行加工
化,使生成的代码更高效,缩短运行
间或节省存储空间。
目标代码 把中间代码变换成特定
机器上的机器指令代码或汇编指令代码。
表格管理编译程序在对源程序的分析
过程中,需要创建和管理一系列的表格 ,
以登记源程序的各类信息和编译各阶
的进展情况。
错误处理一个编译程序不仅能对书写
正确的程序进行翻译,而且能对出现
源程序中的错误进行处理。
文法:是用有限的规则表示无穷字符
集的一种方法
O型文法: 也称为短语文法,其产生式具
有形式:ab,其a,(VTÈVN)*,并且
a至少含一个非终极符;
1型文法: 也称为上下文有关文法。它是 0
型 文 法 的 特 例 。 其 产 生 式 具 有 形 式 :
1aAbagb,AÎVN, g为 非 空 串 .
2|a| £ |b| (S 开始,Se除外
S不出现在任何产生式的右部)
2型文法: 也称为上下文无关文法。它是 1
型文法的特例。其产生式具有形式:A b,
AÎVN, b. 要求部是
一个非终极符.
3型文法: 也称为正则文法。它是 2型文
法的特例。其产生式的右部至多有两个符
号,而且具有下面形式之一: A a A
a B, 其中 A,BÎVN aÎVT
文法描述能力 O型文 > 1 型文法 > 2
文法 > 3 型文法
文法对应自动机
O型文法(短语文法):
灵机 1型文法(上下文有关文法):线
有 界 自 动 机 2型 文 法 ( 上下 文 无 关 文
法):下推自动机 3型文法(正则文法):
有限自动机
句型:如果有 S Þ* a, S 是文法的开始符,
a (VTÈVN )*,则称 aG的句型
句子:如果有 S Þ+ a, S 是文法的开始符,
a VT*,则称 aG的句子
短语:一个句型形如 abg, 如果存在一个
句型 aAg, AÞ+b, b为句型 abg
的短语;
一个句型形如 abg, 如果存在一个句型
aAg,而且
A Þ b, 则称 b为句型 abg 的简单短语;
句柄:一个句型的简单短语可能有多个,
称最左简单短语为句柄
规范推导:最右推导
每个句子一定有最右(规范)推导,每个句
型不一定有最右(规范)推导
二义性文:如果文法的一个 句子有两
棵或两棵以上不同的语法分析树,则
该文法为二义性文法。
消除文法二义性 的常用方法 1规定符
号的优先级 2、规定符号的结合性
文法变换有些语法分析方法要求被分
析的文法满足一定的约束条件,当被
析的文法不满足这些条件时,常常要
行文法变换。文法变换必须保证变换前后
的两个文法 G1 G2 是等价的,即 L(G1)
= L(G2)
消除
A ® ab1 | … | abn| g1|…|
gmA ® aA’| g1|…| gmA’
® b1 | … | bn
消除左递归
A ® A a1 | … | A an| b1|…|
bm消除: A ® b1A’|…| bmA’ A’ ® a1A’
| … | anA’|e
自动是为研究有限内存的计
些语言类而象出的一种计算模型。
NFA
DFA
NFA
集当DFA 态,同时确保转化后的
DFA 与原 NFA 等价
DFA
DFA
的两个 s1 s2,如果分别将 s1
s2 开始态,它们接受的字符串
同,则称 s1 s2 是等价;
DFA
化简的两种方式 :合并等价; (
态合并法)不等价;
法)
DFA
NFA
的不同
DFA
NFA
一个
e
允许
允许
f (S, a)
S’ or
{S1, …,
容易
顶向下语法分:是文法
的开始符号出发,图为输入串建立一
个最左推,或为输入串一个
法树。
顶向下语法分析条:对任意非终
AA的 任 意 两 条 产 生 式
predict(Abk)Ç predict(Abj )=Æk ¹ j
不满足
LL(1)文法条件的情形:文法的产
生式存在左递归公共
递归语法的做对文法中每个
终极U编写一个子程序,成该
非终极符所对应的语法成分的分析和
别任
个非终极符的语法分析子程序的功能
用该非终极符的规则的右部符号
输入串。
递归法优:程序结构和层次清晰
了,易于义加来说
这种方法是分灵的。缺点:对文法的
制太繁调用子程序,分析效
率低
LL(1
思想 LL 的含义是
扫描输入串,用最左推导分析句子。
1表示分析句子时需一个输入
符号。LL(1)方法和递归属于同一级
别的自顶向下分析法(分析条件)
LL(1) 文法的特性 :无二义性,无左
一个非终极符来讲,有一个空
产生式
递归
LL(1) 属于
顶向下分析法,分析条件同。不同
递归法对每个非终极符产生子程序 ,
LL(1)方法则产生 LL 析表;递归
法能判断每个产生式的结束,而 LL(1)
法则不能;递分析法不用符
,而 LL(1)方法则用符号
底向上分析思想输入串出;
可能地找子串并将
一个非终极符;到归约成文法的开始符
或发现语法错误;
规范推导:最右推导
规范句型:最右推导导出的句型
规范:规范句型 α η η
极符串或空串,则称 α为规范前
规范:规范前α不含句柄或含
一个句柄并且句柄在 α的最右,则称
规范前α为规范
规约规范:α是含句柄的
,并且句柄在 α的最右,则称
α为规约规范
LR 方法思想 左至右入输入串;
次找到句柄(约规范)进行
;直到得到开始符或报告语法错误;
LR(0) :带圆点的产生式,圆点只
现在产生式的右部符号串的任意位;
LR(0) 分析的 LR(0)文法仅符号
的内容来确定可, 非常容易
产生冲突;LR(0)文法易于产生冲突
在确定分析动考虑输入
信息。
LR(1) 分析基本思想 :非终极符的每
不同终极(follow),
为展;一个非终极符的一个出现的所
有后终极符构成的集合称为展符集;
符集的: 于移入型,
,是需要保存;约型,
有当下一个输入符是其中一个展
符时, 可以进行约动
LR(1) 析存在的问题 为消
多的态,析表的工作量
存储空间较大;
LALR(1) :合并文法 G
LR(1)动机中的自动
机称为 LALR(1) 自动机
LALR(1)动机冲突,则称文G
LALR(1)文法。
分析能力 : LR(1) É LALR(1) É
SLR(1) É LR(0)
: LR(1) > LALR(1) = SLR(1) = LR(0)
语法:是描述一个合法定义的程序结
的规则
语义说明一个合法定义的程序的含义
词法分析和语法分是对源程序形式上
的识别和处理,而语义分析是对源程
的语义做应的处理工
静态语义:编译时可以检查的语义
动态语义目标程序运行检查
语义
静态语义检查:各种条件表
类型是不是 Boolean 型,运符的分
的类型是否相赋值语句的左右部
类型相容,形实参的类型是
相容,下表表式的类型为所允许
的类型等。
符号识符
性的;存储程序中声明的标识
;
什么在语义分析时需要符号表 ?标识
Token 定义,我们仅仅了标识
符的字,,例如类型,
种类有记 识符的更多信
息需要进行语义分析,而检查语义错
;
为表示标识符的性,我们需要建立
标识符的内部表示,类型的内部表示,
的内部表示。
什么需要类型的内部表示?类型是标识
符的;类型检查是语义分析的
要部分;类型的结构对类型检查很重;
标识符声明:查符号表检查标识符是
否已经声明;如果是,则重复声明
如果不是,则建立标识符的内部表示,
将其入符号表;
标识符使用:查符号表检查标识符是
声明;如果是,则出标识符的
性进行语义分析如果不是,则未声明
声明的语义分析:集被声明的标识符的
;建立被声明标识符的内部表示;检查
重复声明错误;将被声明标识符的内部表
入符号表;
中间代码生成方法:语法导的翻译方
法:性文法和动文法,基于 Token
,基于抽象语法树
运行时间环境:是指目标计机的存器
和内存结构,该结构用管理内存和
目标程序执行时需要的信息.
过程:/用时
为其分部空间的一种统一结构。
栈区的一存储中,
目标程序进行管理。是过程一次活动的一
个现 过程用的时
过程返回的时候释放
动记录通用结构
时变
部变
返回
返回地址
控制信息
动态:如果每个 AR 是等的则用 sp
减去这个长度就可以了,但实际上每个
AR 长度不一定同,所以在每个 AR
中要保存其前一个 AR 的始地址
上的 AR 连起来了,这样连起来AR
结构称之为动态
目标代码生成器要任: 配实
际地址,存器分,生成管理 AR 的指令
和其指令。
存器分遵循存器优先
则:即变值尽可能的存
器中。存器活跃原则:即变至少
有下一用时配寄存器。存器
载原则:即一个存器中可能存
个变型的例子是赋值操作
的结果。源变和被赋值的变量共用一个
存器
四元式生成
(1)始化: S1 S2 为空;
(2) token: tk=ReadOne();
(3) Switch tk of
(i) #: if (S1 为空) exit;
else while (S1 不为空)
{op = pop(S1); (a, b)=pop(2); t=
NewTemp(dir);
GenIR(op, b, a, t); push(S2, t);
}
(ii)操作数: push(tk, S2); goto (2);
(iii)操作: if (S1 为空 || tk 优先级大于
Top(S1))
{ push (tk, S1); goto(2);}
else { while(tk Top(S1) && S1
不为空))
{op = pop(S1); (a, b)=pop(2); t=
NewTemp(dir);
GenIR(op, b, a, t); push(S2, t);
}
push(tk, S1); goto (2);
}
带括号表四元式生成:
(1)始化: S1 S2 为空;
(2) token: tk=ReadOne();
(3) Switch tk of
(i) #: if (S1 为空) exit;
else while (S1 不为空) {
op = pop(S1); (a, b)=pop(2); t=
NewTemp(dir);
GenIR(op, b, a, t); push(S2, t);}
(ii)操作数: push(tk, S2); goto (2); ‘(’
push(tk,s1);goto(2);
(iii)操作: if (S1 为空 || tk 优先级大于
Top(S1))
{ push (tk, S1); goto(2)}
else { while(tk
Top(S1)
&& Top(S1) ≠ ‘(’ && S1
不为空 )))
{ op =
pop(S1); (a, b)=pop(2);
t= NewTemp(dir);
GenIR(op, b, a, t);
push(S2, t); }
push(tk, S1); goto (2);}
(iv) ‘)’: while (Top(S1) ≠ ‘(’ ) {op = pop(S1);
(a, b)=pop(2); t= NewTemp(dir); GenIR(op,
b, a, t);
push(S2, t);}
pop(S1); goto (2);
正则表
于给定的字å, å 上的一个正则表
式定义了 å的一个字符串集合。 如果
RS 表示 å上的一个正则表, 则用
L(RS) 表示 RS定义的字符串集合。
规范缀决定分析动
:规范前含简单短语; 入型
规范前
:该规范前缀只包含一个简单短语,
且是在该规范前的最后;
约规范前 约规范
LR(K) 分析法的工过程 输入 分析
分析表 动程序 成功
标识符的不同种类 标识符 类型标识
标识符 函数标识符 过程标识符
域名标识符
语法导定义 语法导文法基于
法结构,在每个产生式的右部加的语
义动(或语义子程序),在语法分析
过程中,如果遇到语义动就完成对
应的语义处理
语法导的方法 两部分,一是象的部
分,即有动的文法描述二是
部分,即语法分析的同时能处理语义
动程序
摘要:

翻译程序:有这样的一个程序,它把用汇编语言或高级语言编写的程序转换成等价的机器语言程序,我们把这种执行转换功能的程序统称为翻译程序。编译:高级语言的翻译程序称为编译程序。编译程序的输入对象称为源程序,输出对象称为目标程序。编译程序支持的源程序的执行分为两个阶段:编译阶段,运行阶段。编译阶段:对整个源程序进行分析,翻译成等价的目标程序,翻译的同时做语法检查和语义检查,凡是有错误的源程序均指出其错误。运行阶段在运行子程序的支持下执行目标程序。运行子程序是为了支持目标程序的运行而开发的程序。编译程序的功能结构:词法分析:扫描程序的ASCII码序列,识别出一个个具有独立意义的最小语法单位,并把每个单词...

展开>> 收起<<
编译原理复习要点(打印版).doc

共3页,预览3页

还剩页未读, 继续阅读

作者:文小白 分类:教育专区 价格:10文币 属性:3 页 大小:113.5KB 格式:doc 时间:2023-09-15

开通VIP享超值会员特权

  • 多端同步记录
  • 高速下载文档
  • 免费文档工具
  • 分享文档赚钱
  • 每日登录抽奖
  • 优质衍生服务
/ 3
客服
关注