编译原理_第二章

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

X0=ε,X1=X,X2=XX,„,Xn=X„X=Xn
例:若有符号串x=ab,则: x0= ε, x1= ab, x2= abab, x3= ababab 显然,若n>0,则Xn=XXn-1 =Xn-1X。 即:符号串的幂运算服从结合律
符号串集合的运算:
符号串集合的乘积运算:设A、B为符号串集合(集合
每次对符号串最右非终结 符号进行替换
定义5 规范推导(归约):对于直接推导xαy xβy,如果y 只包含终结符号或为空符号串,那么就把这种直接推导 称为规范(最右)推导,跟其对应的归约称为规范(最左)归 约,且记作: xαy xβy r
下面的推导是否规范推导: <无符号整数><数字串> <数字串> <数字> <数字> <数字> 5<数字> 56
三、文法和语言的形式定义
定义1 产生式(或规则)是一有序对(A, α),通常写为: A→ α或A∷= α 其中A是一个符号作为产生式左部, α为有穷符号串作为产生 在规则左部出现的 式的右部,“ →”或“∷=”表示“定义为 …”或“由…组成”。 符号称为非终结符, 在规则中只在右部 定义2 文法是一个四元组: G[S]=(V 它们的全体形成 N, VT, P, S) 出现的符号称为终 VN 其中: 结符,它们的全体 VN为非终结符集合; 形成V T VT为终结符集合; VN∩VT =Ф,一般令 V= VN∪VT ,V中的符号称为文法符号;(V字汇表) P为产生式集合; P中的每个产生式写为:α→β或α∷=β。 S为开始符号(或称根符号,识别符号)。 另外:G[S]也可简写为G
A的闭包: A*=A0∪A1∪A2∪… 设集合A={a,b},则 A+={a,b,aa,ab,ba,bb,aaa, …}
A*={ε,a,b,aa,ab,ba,bb,aaa, …}
显然: A*=A0∪A+
A+=AA*
二、上下文无关文法 (p26)
文法(Grammar):是描述语言的语法结构的形式 规则(即语法规则)。
例 G1 =({N},{0,1},{N→0N,N→1N,N→0,N→1},N) 其中: 非终结符 VN ={N} V={N,0,1} 终结符VT ={0,1} P={N→0N,N→1N,N→0,N→1} 开始符号S 为N G1[N]: N→0N N→1N N→0 N→1
通常情况下,文法只用产生式集合表示:
<句子>
The big monkey ate a banana
语法树(Parse Tree):句子结构的图形表示方式
<句子> <主语> <冠词> <形容词> <名词> <动词> <谓语> <直接宾语> <冠词> The big monkey ate <名词>
a
banana
归纳:什么是文法
<句子> →<主语> <谓语> <主语> → <冠词> <形容词> <名词> <冠词> → the <形容词> →big <谓词> → <动词> <直接宾语> <动词> →ate <直接宾语> →<冠词> <名词> <冠词> → a <名词> →monkey <名词> →banana
12345:=sum; Write(‘sum=’,sum); End. …}
符号串的运算:
符号串的连接(联结、乘积):符号串x和y的连接是指x
和y的符号按先后顺序排列在一起组成一个新的符号串, 用xy表示。 例,若字母表Σ={a,b},符号串x=ab,y=ba 注意: (1)连接运算不满足交换律,即xy≠yx (2)任何符号串x与空串ε的连接都等于x,即: εx=xε=x。 若ab是符号串,则|ab|表示符号串的长度。 那么,|xy|=? |ab|=2 同理: |aabb|= 4 x=ab,y=cde 若有两个符号串 注意:特别规定 |ε|=0。 则 xy=abba
<句子> →<主语> <谓语> <主语> → <冠词> <形容词> <名词> :用规则(产生式)按一定方式去推导 <冠词> 句子的推导 → the <形容词 > →big 或产生句子的过程。 <谓语> → <动词> <直接宾语> <动词> →ate <直接宾语> →<冠词> <名词> <句子> <主语> <谓语> <冠词> → a <冠词> <形容词> <名词> <谓语> <名词> →monkey The <形容词> <名词> <谓语> <名词> →banana The big <名词> <谓语>
符号串的长度:符号串中符号的个数为符号串的长度。
5
符号串的前缀与后缀(头和尾):若有符号串 z=xy(x,y是符
号串),我们称x为z的前缀,y为z的后缀。 例z=abcd 则:z的头有, ε , a , ab , abc , abcd z的尾有, ε ,d , cd , bcd , abcd
符号串的幂运算:设X是一个符号串,则:
The big monkey <谓语> The big monkey <动词> <直接宾语>
The big monkey ate <直接宾语> The big monkey ate <冠词><名词> The big monkey ate a <名词> The big monkey ate a banana
The big monkey ate a banana.
规则:规则又叫产生式(production rule),它是 语法单位结构的一种表示,它引入了符号“::=” 或“→”表示“由……组成”,上述句子的结构 可以表示如下:
<句子> →<主语> <谓语> <主语> → <冠词> <形容词> <名词> <冠词> → the <形容词> →big <谓语> → <动词> <直接宾语> <动词> →ate <直接宾语> →<冠词> <名词> <冠词> → a <名词> →monkey <名词> →banana
1
特别约定:若在推导关系α1 αn中允许α1=αn, 则称αn是α1 的广义推导记作 α1 αn
*
+
N N
*
引用巴科斯范式(BNF)表示文法: 对于具有相同左部的那些产生式,如:U→x, U→y,„, U→z可以缩写为:U→x|y|„|z (“|”可理解为“或”)
(1)<无符号整数> →<数字串> (2)<数字串> →<数字串><数字> (3)<数字串> →<数字> (4)<数字> →0 (5)<数字> →1 (6)<数字> →2 (7)<数字> →3 (8)<数字> →4 (9)<数字> →5 (10)<数字> →6 (11)<数字> →7 (12)<数字> →8 (13)<数字> →9 (1)<无符号整数> →<数字串> (2)<数字串> →<数字串><数字> |<数字> (3)<数字> →0 |1 |2 |3 |4 |5 |6 |7 |8 |9|
定义3 符号串的推导与归约:已给文法G=(VN,VT,P,S), V= VN∪VT,令x,y,α,β∈V* ,且α→β∈P,此时,由符号 串xαy能够直接产生出符号串xβy,我们称: 符号串xβy是符号串xαy的直接推导; 符号串xαy是符号串xβy的直接归约; 记作: xαy xβy 对于上例中文法: 存在以下直接推导: x y xx y x y G1[N]: ε N ε ε 1N ε 11ε N→0N 若有α1,α2,…,αn∈V* 且α1 α2 …, N→1N αn-1 αn则称αn是α1的推导 N→0 + + N→1 记作: α αn N 11
中各元素都是字母表上的字符串),两个字符串集合 的乘积定义为:AB={xy|x∈A , y∈B}(笛卡儿乘积) 设有字母表Σ={a,b,c,d},令A={aa,bb},B={cc,dd} 则AB={aacc,aadd,bbcc,bbdd}, BA={ccaa,ccbb,ddaa,ddbb}。 显然 AB ≠ BA,即符号串集合乘积不满足交换律。
形式语言理论可以证明以下两点: (1)给定一个文法G,就可以从结构上唯一地确定其语言: GL(G) (2)给定一种语言L,能确定其文法,但这种文法可能不 是唯一的: LG1或G2 例1:有文法G[Z]: 用BNF表示: Z →aZb|ab (1)Z→aZb (2)Z →ab 它确定的语言是什么?
第二章 高级语言及其语法描述
引言:关于形式语言
2.1程序语言的定义
1、词法规则、语法规则p12-13
2、语义P14
2.2高级语言的一般特性P14-25
(关于算符的优先顺序p23、名字的左值和右值p24)
2.3 程序语言的语法描述p25
2.3 程序语言的语法描述
一、符号和符号串 字母表:字母表Σ是符号元素的非空集合。 符号:字母表中的元素。 符号串:字母表中的符号所组成的任何有穷序列。
+ 若推导:α1 αn 中的每一步直接推导都 是规范的,那么我们就 把推导: + α1 αn
称为是规范的,且记作:
+ α1 αn
<无符号整数><数字串> <数字串> <数字> <数字串> 6 <数字>6 56
r
<无符号整数> 56 r
+
同样,可给出最左推导的定义。p30-31 例 文法G[E] : E→E+E | E*E | (E) | i 给出句子i*i+ i的最右及最左推导 。 例2.1 p30 例2.2 例2.3
特别定义:空符号串集合:{ε}
空集合:φ={} 注意:因εx = xε =x故,{ε}A=A{ε}=A A φ= φA= φ
符号串集合的幂运算:设A为符号串集合,则集合的幂
运算定义如下: A0={ε} A1=A A2=AA … An= AA……A =AAn-1 =An-1A n个 符号串集合的闭包:设A为符号串集合,则集合的闭包 定义如下: A的正闭包: A+=A1∪A2∪…
用此文法和直接推导的定义可以 推导出任一无符号整数(56)
<无符号整数><数字串> <数字串> <数字> <数字> <数字> 5<数字> 56
可表示为: <无符号整数> 56
+
那么,句型和句子的 * 定义4 句型和句子:设G=(VN,VT,P,S) 是一文法,若 S α 区别是什么 ? α∈V*,则称α为文法G的句型 α∈VT*,则称α为文法G的句子 文法G所对应的语言,记作L(G)={ ω|ω∈VT 试给出该文法的
由产生式(2)知: zab 故ab是文法的一个句子 用产生式(1)(2):zaZba2b2 故a2b2是文法的一个句子 反复使用产生式(1): zaZba2Zb2… an-1Zbn-1 anbn
所以,文法所确定的语言为:L(G[Z])={anbn | n1}
例2:已知语言为 L(G)={abna | n1} 试给出其文法。 G1[Z]: G2[Z]: Z →aBa Z →aBa B →bB|b B →Bb|b
例如,若有字母表Σ={a,b} 则a,b是字母表Σ中的元素(符号); a,b,aa,ab,ba…都是符号串。 注意:符号串中 的符号与顺序有 关,ab和ba是不 同的符号串
特别定义:空符号串——不含任何符号的符号串, 用 ε 表示。
设有字母表Σ={a…z, A…Z,0…9,…, 各种运算符和其它特殊 符号,…},则,由这些字母表中的元素(符号)可以组成不同 的符号串: A={ Program example; Var sum,I: integer; Begin Sum := 0; For I:=1 to 10 do sum:=sum+I;
*,且S
ω}
+
句型、句子举例, 无符号整数><数字串 例:< 前面提到的文法 G ={>VN,V T,P,〈无符号整数〉} <数字串> <数字> 并说明它所确定 其中,VT ={0, 1< , 2, , 4, ,7,8,9} 数字 >3 < 数字 > 5,6 的语言。 5<数字> VN ={〈无符号整数〉,〈数字串〉,〈数字〉} 56 由此我们可以看出,文法和语言是密切相关的,根据文 P: <无符号整数>→<数字串> 法可以推导出任一句型和句子,而所有句子的集合则为 <数字串>→<数字串><数字>┃<数字> 该文法所对应的语言,即语言是所有句Biblioteka Baidu构成的集合, *的子集: 它是所有终结符号串所组成的集合 V <数字>→ 0┃1┃2┃3┃4 ┃ ┃6┃7┃8┃9 T5 L(G) VT*
相关文档
最新文档