编译程序是将高级语言书写的源程序翻译成低级语言程序
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4、句型、句子
设有文法G[S],若从文法开始符号S x,则称符 号串x为文法G[S]的句型;仅仅由终结符组成的 句型叫句子。
若x是一个句型,则x (VNVT)* 若x是一个句子,则x VT*
Ex: S0S1|01
S 01 S 0S1 S 000111
(句型、句子) (句型) (句型、句子)
• 方式二:当语言为无穷集合时,用文法表示。 • EX(续上例):
设用A表示∑,用式子A0表示0∈A(读作:“A产生 0”)。
符号:“”定义为“产生”、“生成”、“导出”等。 反复用
A0 A1 AA0 AA1 以上四条规则式,则可以生成无穷的集合。
三、文法的形式定义
1、规则(产生)式
一个规则式是一个符号与一个符号串的有序偶(对), 形如:(A,)、A 或 A ::= ,用以描述语言 中的句子是怎样产生的。
– Note1:符号串的顺序很重要,如:ab≠ba; 2:不含任何符号的符号串称为空串,用
ε 表示。
– 符号串长度:|a|=1,|ab|=2,| ε|=0
二、符号串的运算
• 1、连接
– 设X和Y是符号串,则串XY称为它们的连接。 – EX:X=ABC,Y=CDF
XY=ABCCDF YX=CDFABC – Note: ε与X的连接或X与ε的连接=X
解2:G[I]:IL|ILD
La | b | c…… z | A | B | C…… | Z | D1 | 2 | 3…… | 9 |
Ex4:已知L={ ( n ) n | n =0, 1 , 2 , ……} , 求文法G。 解:
∵ L={ , ( ) ,(( )), ((( ))), ……} ∴ G[S]:S |( S )
词法分析,语法分析,中间代码生成,代码优 化,目标代码生成均要与符号表格管理打交道, 他们各自把工作产生的一些信息存放在符号表里, 都涉及到制造,查询,更新符号表格的工作,所 以符号表的存取方法直接影响着编译程序的效率。
许多编译程序采用了一种与“3地址指令”非 常相似的“四元式”作为中间代码,格式是:
X0=
注: X0 ≠1 X1=X X2=XX
X0=
X1=abc X2=abcabc Xn= abc……abc
Xn= XX……X n个X
n个abc
• 4、集合的幂运算
– 设A是符号串的集合,则定义: A0={}
A1=A A2=AA An=AA……A=An-1A
–EX: •A={a, b} ,则有
主语
句子
谓语
间接宾语 直接宾语
代词
动词Baidu Nhomakorabea
代词 冠词 名词
He
gave
me
a
book
Note: 1、形式语言是一种上下文无关的语言,是有别于自然 语言的一种语言。
2、定义语言的一组规则及其有关符号,称为文法。 因此,我们把定义形式语言的规则和有关符号的集合,称为上
下文无关的文法。
二、形式语言的描述
• 方式一:当语言为有穷集合时,用枚举法表示。 • EX:设字母表A={a, b, c}
G=(VT,VN,S,P)
其中:
VT:所有终结符的集合 VN:所有非终结符的集合 S:开始符 P:规则式的集合
EX:
一个文法G=(VT,VN,S,P),其中:
VT={0, 1}
所有终结符的集合
VN={A }
所有非终结符的集合
S=A
开始符
P={A0|1|A0|A1} 规则式的集合
Qu: 给定一个语言L,如何求文法G?
以上所描述的句子的集合为:
{i , ( i ), i+i, i*i, i+i*i, ……. }
Ex3:设计一个表示所有标识符 I 的文法。 分析:标识符--字母或字母开头的字母数字串。 解1:形式化描述:
G[I]:IL|IL|ID La | b | c…… z | A | B | C…… | Z | D1 | 2 | 3…… | 9 |
复习基本概念
第3讲
1、字母表、符号串、符号串的长度、空串
2、符号串运算:连接、符号串的幂
3、集合的运算:集合乘、集合文的法幂的作、用集是合什的闭
包
么?
4、形式语言的描述:
(1)枚举法描述
(2)用文法描述
5、文法的形式定义
G=(VT,VN,S,P)
四、语言的形式定义
1、直接推导
设X,Y是符号串,如果使用一次规则式可以 从X推导出Y,则Y为X的直接推导。记为: XY
Ex:
设G[S]:S0S1|01,则 S01 S 0S1 0S1 0011 0S1 00S11 ……
2、+推导 (正推导)
设X,Y是符号串,若使用一次或多次规则可以 从X推导出Y,则Y为X的+推导。 记为:X Y
Ex:
设G[S]:S0S1|01,则 S01 S 0S1 00S11 000111 所以 S 000111
算符 左操作数 右操作数 结果
第2章 文法和语言
QU:
1、A=B*
2、A=B*C
在C语言中的,以上 两个符号串是否是合 法的、正确的?
QU:那么,Compiler如 何对语法进行定义?是 基于什么形式进行判断 识别的?
AN:形式语言中的文 法是阐明语法的一个重 要工具。
2.1 引言
• 形式化方法:指用一整套带有严格规定 的符号体系来描述问题的方法。
<名词>book
推导出
<句子> <主语><谓语><间接宾语><直接宾语> <代词><谓语><间接宾语><直接宾语> <He><谓语><间接宾语><直接宾语> <He><动词><间接宾语><直接宾语> <He><gave><间接宾语><直接宾语> <He><gave><代词><直接宾语> <He><gave><me><直接宾语> <He><gave>< me><冠词><名词> <He><gave>< me><a><名词> <He><gave>< me><a><book> 同样还可推导出: He gave He a book, Me gave me a book Me gave He a book
•A0={ac,bc,ad,bd} •A1=A={a,b} •A2=AA={aa, ab, ba, bb} •A3=A2A={aaa,aab,aba,abb,baa,bab,bba,bbb}
• 5、集合的闭包(A+和A*)
– 设A是任意一个集合,则定义A:的正闭包,其
A+=A1 ∪ A2 ∪ A3…
Ex1:设∑={a, b},试设计一个文法G,定义语言L={a2n,b2n | n≥1} 解:由串结构的特征L={aa,bb,aaaa,bbbb,……},可以令P:
Aaa
AaaB
Baa | aaB
以此得序列{aa,aaaa,……},同理
Abb
AbbD
Dbb|bbD
可以得到序列{bb,bbbb,……}
一、形式语言
“定义为”或 “由……组成”
<句子><主语><谓语><间接宾语><直接宾语>
<主语><代词>
<谓语><动词>
<间接宾语><代词>
<直接宾语><冠词><名词>
<代词>He
<代词>me <冠词>a <动词>gave
QU:句子He gave me a book 语法上是否是正确的?
以上从文法的开始符E ( i * i + i ),所以符号 串( i * i + i )是G[E]的一个句子。
5、语言L(G[S])
对一个文法G[S],其句子的全体所组成的集合即 语言L(G[S])。
L(G[S])={x | S x 且 xVT*}
L1={a, b, c} L2={aa, ab ,a ,ac} L3={c, cc,ccc}
• EX:设字母表∑={0, 1},则有 ∑+={0,1,00,10,001,000,……}
这是一个无穷集合。其中,任何一个元素 就相当于一个程序!∑+本身则相当于某一
语言的所有程序的集合。
设字母表∑={0, 1},则有∑ +={0,1,00,10,001,000,……}
<句子><主语><谓语><间接宾语><直接宾语> <主语><代词> <谓语><动词> <间接宾语><代词> <直接宾语><冠词><名词>
……
2.2 符号串
• 一、字母表和符号串 • 二、符号串的运算
一、字母表和符号串
• 1、字母表(Σ)
– Def:是元素的非空有穷集合。 – Note1: Σ中至少有一个元素;
以上简记为: G[A]:AB|D Baa|aBa Dbb|bDb
Note1:给定一个语言时,文法不是唯一的。 Ex2:2:用用文文法法定描义述一语个言含时+,,要*准运确算,符既的不算能术扩表大达也式不。能缩小。 解1:非形式化描述, 解12、:变形量式是化一描个述表:达式;
2、G若[EE]:1和EE2是i 一个表达式,则E1+E2、E1*E2、(E1)也是 一个表达式。EE + E|E * E | ( E )
2: Σ中可以是字母、数字或其它符号。 – Ex1:C语言的字母表
ΣC={保留字,字母,数字,专用符号,……}
C语言= ΣC 一组规则 – Ex2:汉语的字母表
Σ汉={汉字,数字,标点符号,……}
• 2、符号与符号串
– 符号(字符):一个符号是字母表中的元素。
– 符号串:是符号的有穷序列。
– EX1: Σ={a, b, c},则a, b, c, ab, ba都是Σ上的符号 串。
中无空串
A*=A0 ∪ A+
=A0 ∪ A1 ∪ A2……
A的 * 闭包,
–EX:
其中有空串
•A={a, b} ,则有
•A+={a, b, aa, ab, ba, bb, aaa, aab, ……}
•A*=A0 ∪ A+
={ ,a ,b, aa, ……}
2.3 文法与语言的形式意义
▪ 形式语言 ▪ 形式语言的描述 ▪ 文法的形式定义 ▪ 语言的形式定义 ▪ 最左、最右推导 ▪ 归约 ▪ 递归
3、*推导 (广义推导)
设X,Y是符号串,若使用0次或多次规则可以从 X推导出Y,则Y为X的*推导。 记为:X Y
Ex:
设G[S]:S0S1|01,则
区别S: S S直01接推导长度=1 S所以正广0推义SS1导推长 导0000S度 长01111度110000111
即:直接推导正推导广义推导
• 2、集合的乘积
– 设A、B是符号串的集合,则定义A与B的乘 积为:
AB={xy | xA, y B}
– EX: • A={a, b}, B={c, d},则AB ={ac,bc,ad,bd}
• A{}={}A=A
• {} { }, { }=
• 3、符号串的幂运算
– 设X是符号串,则 • 例、设X=abc,则
∴ 文法G=(VT,VN,S,P),其中: VT={a, b},VN={A,B,D},S=A P={Aaa|bb|aaB|bbD, Baa|aaB, Dbb|bbD}
另解:P:AB|D Baa|aBa Dbb|bDb
∴ 文法G=(VT,VN,S,P),其中: VT={a, b},VN={A,B,D},S=A P={AB|D, Baa|aBa, Dbb|bDb}
一组规则可以描述一个语言的语法结构。
非终结符,一般在左边,它能派生出符号、符号串。 用大写字母表示,如上述中的A。与之对应地,终结 符用小写表示,由它不能派生出任何符号,是一个 不可再分的基本单位,即字母表(∑)中的一个元 素。
2、文法的形式定义
一个文法是规则的非空有穷集合。常用一个四 元组表示,定义为
第一章第课2讲程复习
编译程序是将高级语言书写的源程序翻译成低级 语言程序。一般包括词法分析,语法分析,中间代 码生成,代码优化,目标代码生成五个部分,还应 该包括表格管理和出错处理。
其中中间代码生成和代码优化并不是每个程序都 需要的。 词法分析器用于识别单词,语法分析器用于发现 源程序中的语法错误。 代码优化一般都是在中间代码级上完成的,对中 间代码的优化可以使目标程序的运行时间更短或所 占的空间更少。
Ex:
设G[E]:EE+E|E*E|(E)|i,试证明 符号串( i * i + i )是文法G[E]的一个句子
证明:从E出发,只要证明符号串x = ( i * i + i ) 对 于文法G[E] 存在一个推导。
E(E)(E+E) (E*E+E) (i*E+E) (i*i+E) (i * i + i )