编译原理第二章(2-构造文法)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
字母表与符号串
2. 符号、符号串及其运算(P9)
字母表中的元素称为符号。 符号串是字母表中的符号所组成的任何有穷序列,通常用小写的字 母表示。 例:∑={ 0 , 1} 则 00,11,01,10,010 ...... 是符号串。 注意:1)不包含任何符号的符号串为空串,记为ε。 2)符号串中的符号顺序很重要。ab≠ba 3)符号串x中有m个符号,则 |x|=m m是长度。
例如:1)<句子> → <主语> <谓语> 2)<主语> → <冠词> <名词> 3)<谓语> → <动词> <宾语> 4)<宾语> → <冠词> <名词> 5)<名词> → man | car 6)<冠词> → the 7)<名词> → drive The man drive the car The car drive the man 一组规则规定一个语言 The car drive the car 的语法结构 The man drive the man
符号串集合的正闭包A+ 与 闭包A* A是集合 A的正闭包 A+= A1∪A2 ∪ …… ∪ An A的闭包 A*= A0 ∪ A1∪A2 ∪ …… ∪ An = {ε} ∪ A+ A={a,b} A+ = { a, b, aa, ab, ba, bb, aaa, aab,…..} A* = {ε, a , b, aa , ab, ba, bb, aaa, aab,…..} A+表示A上元素a,b构成的所有符号串的集合。
间接右递归。
递归举例
G1[S]: S→Sa|Ab|b|c A→Bc|a B→Sb|b G2[S]: S→a|ε|aTb
T→S, T |S 直接右递归
直接左递归 G3[S]: S→Aa|c
A→Bc|a B→Sb|b
间接左递归
2.3.3 和语言有关的几个概念 文法递归的作用:
用较少的产生式产生无穷多个句子,实现“用有穷表示无穷”。
*
2.3.3 和语言有关的几个ห้องสมุดไป่ตู้念
P17
7
直接递归与间接递归
如果文法的产生式呈U→…U…形式,则称其为规则递归,也
称直接递归。(U为非终结符)
* 如果文法中有推导 U …U… ,则称其为文法递归,也称
间接递归。
所谓递归即,规则的左部或右部具有相同的非终结符。
*
2.3.3 和语言有关的几个概念
2.3 文法和语言的形式定义
2.3.1 文法的有关概念
1.终结符号 终结符号是组成语言的基本符号,如保留字、标识符、常数、 运算符、界限符等。终结符号是语言的不可再分的基本符号。终 结符号形成的集合记为VT。一般用小写字母表示。 2.非终结符号 非终结符号用来表示语言的语法成分(或语法范畴、语法单 位),例如“赋值语句”。非终结符号所形成的集合记为VN。一 般用大写字母来表示。 VT∩VN=
证明:字符串 (i+i)*i-i 是文法G[E]的 句子 字符串(i+i)*i-i 是 句子 方框里面的字符串是 句型
E =>E-T =>E-F =>E-i =>T-i =>T*F-i =>T*i-i =>F*i-i =>(E)*i-i
=>(E+T)*i-i
=>(E+F)*i-i =>(E+i)*i-i
【例1】设有文法G[S]: S→01∣0S1
S => 01 S => 0S1 => 00S11 => 000111
S,01,0S1,00S11,000111 都是句型。 01和000111 又是句型。
【例2】设有文法G[E]: E→E+T∣E-T∣T T→T*F∣T/F∣F F→(E)∣I
2.3.2文法的形式定义
文法是产生式的有穷非空的集合。 文法G是一个四元组,G[S]=(VT,VN,P,S)。 VT——终结符号集。 VN——非终结符号集。 S ——开始符号。至少要在一条产生式中作为左部出现。 P ——表示产生式的有穷非空的集合。
例1
定义标识符的文法
G[<标识符>]=({ A,B,…,Y,Z,0,1,…,9}, {<标识符>,<字母>,<数字>},P,<标识符>) P 定义为: <标识符>→<字母>|<标识符><字母>|<标识符><数字> <字母>→A|B|C|D|E|F|G|……|U|V|W|X|Y|Z
rammar)以及它的语义。 字母表是符号的有穷集,而符号构成了语言中的句子。 语法是结构规则的有穷集,这些规则定义了句子中符号 的合法上下文。 语义通常是操作规则的有穷集,这些规则定义了用该语 言编写的任何程序在某个计算机上执行的操作性效果。
2.2.1 字母表与符号串
1. 字母表
字母表是元素的有穷非空的集合。 字母表中的元素称为符号。 例如{a,b,……,y,z},{0,1}等。 常用∑ 来表示 。 注意: 字母表中至少包含一个元素。元素可以是字母、数字 或其他符号。
+ α 0 α
n
显然,这里n≥1, 当n=1,就是直接推导。 当n=0时, α0=αn
.当n≥0,我们称为广义推导。
推导的逆过程称为归约,即αn可归约到α0 。
2.3.3 和语言有关的几个概念
3. 最左推导和最右推导
如果在某个推导过程中的任何一步直接推导αβ中, 都是对符号串α的最左(右)非终结符号进行替换,则称其 为最左(右)推导。最右推导又叫做规范推导。规范推导的 逆过程(最左规约)称为规范规约。
·
文法的实用限制
形式语言理论
由Chomsky于1956年首先提出。
是指由数学方法——形式化方法研究自然语言(如英
语)和人工语言(如程序设计语言)的语法的理论。
目前在自然语言的翻译、计算机语言的描述和转换、
编译程序的构造、模式识别等方面有广泛的应用。
2.1 语言成分的基本概念
一个语言的成分包括字母表(Alphabet),文法(G
2.2.2符号串运算
符号串的连接 设x和y是符号串,则称xy是他们的连接。 例如:x=abc , y=1a 则 xy=abc1a , yx=1aabc 即 |x|=3, |y|=2, |xy|=3+2=5 注意:对任意一个符号串x 我们有εx = x ε= x
符号串集合的乘积 设A和B是符号串的集合,则A和B的乘积定义为 AB={xy | x∈A,y ∈B} 例如: A={a,b} B={c,d} 则AB={ac,ad,bc,bd} 集合的乘积是满足于x∈A , y ∈B 的所有符号串xy 所构成的集合。 注意: 1、对于任何集合A , 有{ε}A = A {ε}= A 2、 {ε}= Ø Ø≠ { }
<数字>→0|1|2|3|4|5|6|7|8|9
2.3.3 和语言有关的几个概念
1.直接推导
如果α → β是文法G的一条产生式,而γ ,δ是(VT∪VN)*中任意 一个符号串,则将α → β作用于符号串γ α δ上得到符号串γ β δ ,称 符号串γ β δ 是符号串γ α δ的直接推导,记为 γ α δ γβδ 直接推导的逆过程称为直接归约,即由符号串γ β δ可直接归约到γ α δ 。
8.规则左递归与规则右递归
如果文法的产生式呈 U→U… 的形式,则称其为 规则左递归。 如果文法的产生式呈 U→…U 的形式,则称其为 规则右递归。 规则左(右)递归,也称直接左(右)递归。
9.文法左递归与文法右递归
+ 如果文法中有推导 U U… ,则称其为文法左递归,也称
间接左递归。
+ 如果文法中有推导 U …U ,则称其为文法右递归,也称
直接推导举例
例1 文法G[E]: E →E+T|T T →T*F|F F →(E)|i
* T F * T*F F
例2 见P14
2.3.3 和语言有关的几个概念
2. 推导
设α0、α1、…αn均为(VT∪VN)*中的符号串,且有 α0α1α2…αn-1αn 则称以上序列是长度为n的推导,即α0可经过n步推导得到αn。
2.3
文法的分类
0型文法(无限制文法或短语结构文法)
产生式为 : α→β 其中:α (VN∪VT)* 且至少包含一个非终结符 β (VN∪VT)*, 0型文法没有其他任何限制条件,故称无限制文法。 0型文法所生成的语言称为无限制语言。
例如 有0型文法G=(VN,VT,P,S) ,其中 P={S→0AB 1B→0 B→SA|01 A1→SB1 A0→S0B} 其描述的0型语言为 L(G[S])={ }
2.3.3 和语言有关的几个概念 P15
4.
句型
* * 设有文法G[S],如果 S u ,且 u∈ (VT∪VN)
则称符号串u
为文法G[S]的句型。由规范推导(最右推导)得到的句型称为规范句型.
5.
句子
,且 uVT* ,则称符号串u为
* 设有文法G[S],如果 S u
文法G[S]的句子。
由此可看出: 句型包含句子
2.3 文法和语言的形式定义
3.产生式:产生式(规则)是一个有序对(α,β),通常写作 α→β(或α∷=β) 其中α称为产生式的左部,β称为产生式的右部。α(VT∪VN)+, β(VT∪VN)*。 产生式是用来定义一个语法成分的。它描述了一个语法成分 的形成规则。例如标识符的构成规则可描述为: <标识符>→<字母>|<标识符><字母>|<标识符><数字> 假如有若干条规则有相同的左部,通常写作:α→β1|β2|…|βn βn称为α的候选式
【例1】设有文法G[N1]: N1→N N→ND∣D D→0∣1∣2
N1 =>N =>ND =>N2 =>D2 =>12 N1 =>N =>ND =>DD =>1D =>12 最右推导 最左推导 不是最左推导 也不是最右推导
N1 =>N =>ND =>DD =>D2 =>12
【例2】设有文法G[E]: E→E+T∣E-T∣T T→T*F∣T/F∣F F→(E)∣i
G4[<无符号整数>]: <无符号整数>→<数字>|<无符号整数><数字> <数字>→0|1|2|3|4|5|6|7|8|9
2.3
2型和3型 。
文法的分类
乔姆斯基(Chomsky)把文法分成四种类型 ,即0型、1型、
这四类文法的区别在于:对产生式规则的形式上施加不同 的限制。从0型到3型对产生式的要求越来越严格,而其描述语 言的能力是逐步减弱的。
符号串的方幂 设x是符号串,xn 是x自身连结n次。并且x0= ε 则 x1= x x2= xx xn= xx……x= x xn-1 n个 例如, 设 x=abc,则 x1= abc x2= abcabc ……
符号串集合的方幂 A是符号串的集合, An 是集合A自身n次相乘, 并且A0= {ε} 则 A 1= A A2= AA An= AA……A= A An-1 (n>0) n个A 例1 A={a,b} A0= {ε} A1 = {a,b} A2= {aa,ab,ba,bb} A3= {aa,ab,ba,bb}· {a,b} = { aaa,aab,aba,abb,baa,bab,bba,bbb }
前述内容回顾
· 编译程序 · 编译方式与解释方式的根本区别
· 编译程序的工作过程
· 编译程序的结构
· 编译程序的组织方式
· 编译程序的构造
第二章 文法和语言的基本知识
本章主要介绍形式语言理论中的一些最 基本的概念和基础知识,它是学习以后各章
节的基石。
本章内容简介
· 文法的形式定义 · 语言的形式定义 · 为语言构造文法与由文法推出语言 · 语法树及文法的二义性 · 文法和语言的分类
E =>E-T =>E-F =>E-i =>T-i =>T*F-i =>T*i-i =>F*i-i =>(E)*i-i
=>(E+T)*i-i 请写出字符串 (i+i)*i-i 最右推导
=>(E+F)*i-i =>(E+i)*i-i
=>(T+i)*i-F =>(F+i)*i-F =>(i+i)*i-i
=>(T+i)*i-F =>(F+i)*i-F =>(i+i)*i-i
2.3.3 和语言有关的几个概念 6. 语言
文法G[S]产生的所有句子的集合称为G所定义的语言,记为L(G[S]) L(G[S])={u |
S+ u =>
,且uVT* }
由此可知:1) 当文法给定,语言也就确定。
2) L(G)是VT*的子集,即属于VT*的符号串x不一定属于L(G)