第二章 文法和语言

91
第第第 第第第第第 2.1 第第第第第第第 第第第第第第 第第第第第第第第第第 第第第第第 第第第第第 2.2 第第第第第 第第第 第第第第第 第第第第第第第

description

第二章 文法和语言. 2.1 文法的基本概念 符号和符号串 文法和语言的形式定义 推导与递归 文法的分类 2.2 句型的分析 语法树 文法的约定 句型的分析方法. 主要内容. 本章讨论与编译实现相关的形式语言理论基本概念,主要内容有: 文法与语言的形式定义 Chomsky 文法及其分类 上下文无关文法的主要特性 文法的等价变换 句型分析的概念. 文法与语言. 一个程序设计语言的确切定义是构造编译程序的重要前提。 - PowerPoint PPT Presentation

Transcript of 第二章 文法和语言

Page 1: 第二章  文法和语言

第二章 文法和语言

2.1文法的基本概念 符号和符号串 文法和语言的形式定义 推导与递归 文法的分类

2.2句型的分析 语法树 文法的约定 句型的分析方法

Page 2: 第二章  文法和语言

主要内容

本章讨论与编译实现相关的形式语言理论基本概念,主要内容有: 文法与语言的形式定义 Chomsky 文法及其分类 上下文无关文法的主要特性 文法的等价变换 句型分析的概念

Page 3: 第二章  文法和语言

文法与语言

一个程序设计语言的确切定义是构造编译程序的重要前提。

文法被用来精确而无歧义地描述语言的构成方式 .

文法描述语言的时候不考虑语言的含义。

Page 4: 第二章  文法和语言

2.1 语言和文法的直观概念1. 程序设计语言的定义

语言是一个记号系统。 汉语 -- 符合汉语语法的句子的全体 英语 -- 符合英语语法的句子的全体 程序设计语言 -- 该语言的程序的全体

程序设计语言由语法和语义定义: 语法:定义每个程序构成的规则 语义:定义每个程序的意义

Page 5: 第二章  文法和语言

程序设计语言包括 : 语法和语义语法 (syntax)

定义 : 是一组规则,用它可以形成和产生一个合适的程序

描述工具 : 文法 作用 : 定义什么样的符号序列是合法的,

与符号的含义无关。

Page 6: 第二章  文法和语言

语义 (semantics) 分类 :

静态语义:一系列限定规则,确定哪些合乎语法的程序是合适的

动态语义:表明程序要做什么 描述工具 : 指称语义 , 操作语义等 作用 : 检查类型匹配,变量作用域等

Page 7: 第二章  文法和语言

2. 文法的直观概念如何来描述一种语言?文法是描述语言的语法(形式)

结构的形式规则。 如果语言是有穷的(只含有有穷多个句子),可以将

句子逐一列出来表示 如果语言是无穷的,要找出语言的有穷表示。 有两个途经:1.生成方式 (文法):语言中的每个句子可以用严格定

义的规则来构造2.识别方式(自动机):用一个过程,当输入的一任意

串属于语言时,该过程经有限次计算后就会停止并回答“是”,若不属于,要么能停止并回答“不是”,要么永远继续下去。

Page 8: 第二章  文法和语言

例 :“ 我是大学生”是汉语的一个句子

用 EBNF 来表示汉语句子的构成规则:

〈句子〉∷ = 〈主语〉〈谓语〉〈主语〉∷ = 〈代词〉|〈名词〉〈代词〉∷ = 我|你|他〈名词〉∷ = 王明|大学生|工人|英语〈谓语〉∷ = 〈动词〉〈直接宾语〉〈动词〉∷ = 是|学习〈直接宾语〉∷ = 〈代词〉|〈名词〉

Page 9: 第二章  文法和语言

由规则推导句子

方法 : 用一条规则∷ = 的右端符号串代替 ::= 的左端 .表示 : 用“ => ” 表示推导 , 含义是 ,使用一条规则 , 代替 => 左边的某个符号 ,产生 => 右端的符号串 .

Page 10: 第二章  文法和语言

例如 : 句子“我是大学生”的推导过程如下:〈句子〉 〈主语〉〈谓语〉

〈代词〉〈谓语〉 我〈谓语〉 我〈动词〉〈直接宾语〉 我是〈直接宾语〉

我是〈名词〉 我是大学生

Page 11: 第二章  文法和语言

形式语言Chomsky于 1956 年提出了一种用来描述语言的数学系统。人们把用一组数学符号和规则来描述语言的方式称为形式描述,而把所用的数学符号和规则称为形式语言。形式语言,只是从语法上研究语言。它是抽象的数学系统,用于模拟程序设计语言的语法,或者是并不很成功地模拟自然语言如英语的语法。形式语言理论是编译理论的重要基础,它主要研究组成符号语言的符号串的集合及它们的表示法、结构与特性。

Page 12: 第二章  文法和语言

形式语言和编译理论中的最基本概念

——符号串和符号串集合基本定义它们的运算

Page 13: 第二章  文法和语言

2.2 符号和符号串

1. 字母表 定义 : 元素的非空有穷集合 例:∑ ={0‚1} Α={a‚b,c} 元素也称为符号,字母表也称符号集。 程序语言的字母表由字母数字和若干

专用符号组成。

Page 14: 第二章  文法和语言

2. 符号串 定义 : 由字母表中的符号组成的任何有穷序列 例: 0,00,10 是字母表∑ ={0‚1} 上的符号串 a,ab,aaca是 Α={a‚b, c} 上的符号串 在符号串中,符号是有顺序的,顺序不同 , 代

表不同的符号串,如 :ab和 ba 不同 不含任何符号的符号串称为空串,用 ε 表示

注意 :{ε} 并不等于空集合 { } 符号串长度 : 符号串中含有符号的个数

如 : |abc|=3 | ε|=0

Page 15: 第二章  文法和语言

子符号串

设有非空符号串u=xvy, 其中符号串

,则称 v 为符号串 u 的子符号串。

V≠ε

例如 符号串 x=a+b*(c+d),

则 a, a+b*, 与 (c+d) 等

都是 x 的子符号串,且

其长度分别为 |a|=1, |

a+b*|=4, |(c+d)|=5

Page 16: 第二章  文法和语言

符号串的头与尾

如果 z=xy 是一个符号串,则 x是 z 的头,而 y是 z 的尾。如果 y 非空,则 x

是 z 的固有头;如果 x 非空,则 y是 z

的固有尾。

例如:字母表A={a,b,c} 上的符号串x=abc, 则 x 的

头: ε, a, ab, abc,

尾 :ε, c, bc, abc

固有头 : ε, a, ab,

固有尾 :ε, c, bc

Page 17: 第二章  文法和语言

3. 符号串的运算 符号串的连接:设 x、 y 是符号串 , 它

们的连接是把 y 的符号写在 x 的符号之后得到的符号串 xy

例 如 x="ST" , y="abu" , 则 xy="STabu"

显然 εx = xε=x 符号串的方幂:把符号串 a 自身连接 n

次得到的符号串 an = aa…aa例如 a1=a a2=aa a0=ε

Page 18: 第二章  文法和语言

4. 符号串集合: 定义 : 若集合 A 中所有元素都是某字母表上

的符号串,则称 A 为字母表上的符号串集合。

符号串集合的乘积:符号串集合 A和 B 的乘积定义为 :

AB ={xy|x A∈ 且 y B∈ } ,即 AB 是由 A中的串 x 和 B 中的串 y 连接而成的串 xy 组成的集合。

若集合 A = ab,cde B = 0,1 则 AB = ab0,ab1,cde0,cde1

显然 {ε}A = A{ε} = A

Page 19: 第二章  文法和语言

符号串集合的方幂 : 设 A 是符号串的集合,则称 Ai 为符号串集 A 的方幂,其中 i 是非负整数。具体定义如下 :

A0 ={ε }A1 = A , A2 = A AAK = AA......A(k 个 )

Page 20: 第二章  文法和语言

5. 集合的闭包 闭包

集合 Σ 的闭包 Σ * 定义如下: Σ * = Σ 0 Σ∪ 1 Σ ∪ 2 Σ ∪ 3 …∪

例:设有字母表 Σ={0, 1}

则 Σ*=Σ0 Σ∪ 1 Σ∪ 2 …∪={ε,0,1,00,01,10,11,000,…}

即 Σ* 表示 Σ 上所有有穷长的串的集合。

Page 21: 第二章  文法和语言

正闭包Σ+ = Σ1 Σ∪ 2 Σ∪ 3 …∪ 称为 Σ 的正闭包。 + 表示上的除 ε 外的所有用穷长串的集合Σ* = Σ0 Σ∪ +

Σ+ = ΣΣ* = Σ* Σ

Page 22: 第二章  文法和语言

字母表上的一个语言是上符合某种规则的一些符号串的集合 ,是 * 的一个子集。

例如: Σ={a,b} Σ*={ε,a,b,aa,ab,ba,bb,aaa,aab,…}

1. 集合 {ab,aabb,aaabbb,…,anbn,…} 或{w|w∈Σ*且w=anbn,n≥1} 为字母表上的一个语言。

2.集合 {a,aa,aaa,…} 或 {w|w∈Σ*且w=an,n≥1}为字母表上的一个语言。

3. ε 是一个语言。4. 即 是一个语言。

Page 23: 第二章  文法和语言

小结

1 符号与字母表2 符号串3 符号串的运算4 符号串集合5 集合的闭包6 字母表的闭包

Page 24: 第二章  文法和语言

2.3 文法和语言的形式定义

1 .文法的定义2 .文法形式上的约定3 .推导与归约4 .句型、句子、语言的定义5 .文法的等价

Page 25: 第二章  文法和语言

“ 我是大学生”是汉语的一个句子

用 ::= 表示的汉语句子的构成规则:

〈句子〉∷ = 〈主语〉〈谓语〉〈主语〉∷ = 〈代词〉|〈名词〉〈代词〉∷ = 我|你|他〈名词〉∷ = 王明|大学生|工人|英语〈谓语〉∷ = 〈动词〉〈直接宾语〉〈动词〉∷ = 是|学习〈直接宾语〉∷ = 〈代词〉|〈名词〉

Page 26: 第二章  文法和语言

句子“我是大学生”的推导过程如下:从句子出发,反复把规则中的” ::=” 左边的成分替换成右边的成分。〈句子〉 〈主语〉〈谓语〉

〈代词〉〈谓语〉 我〈谓语〉 我〈动词〉〈直接宾语〉 我是〈直接宾语〉

我是〈名词〉 我是大学生

Page 27: 第二章  文法和语言

文法——介绍

包括四个组成部分:一组终结符号(不能被替换的符号,单词符

号)一组非终结符号(能够被替换为终结符号或

非终结符号,语法单位)一个开始符号(从这个符号开始替换,最大

语法单位 - 程序)一组产生式(替换规则,把左边的字符串替

换为右边的字符串)

Page 28: 第二章  文法和语言

关键思路

从文法的开始符号出发,反复使用产生式,对非终结符进行替换(展开),直到整个字符串中不在包含非终结符。这时,得到了这个文法的一个句子(一个程序)这个过程称为推导

Page 29: 第二章  文法和语言

1 .文法的形式定义 产生式(规则)

产生式是一个有序对 (α,β) ,通常写作 α→β (或 α::=β )

文法定义 :文法 G(Grammar) 定义为四元组( VN, VT, P, S)

VN (Nonternimal) :非终结符集VT (Terminal) :终结符集P (Production) :产生式(规则)集合S :开始符号或识别符号

Page 30: 第二章  文法和语言

说明 : V=VN V∪ T, V 称为文法 G 的字母表 P 中产生式形如: α→β, 其中 α V∈ + 且至少含一个

非终结符, β V*∈ VN,VT和 P 是非空有穷集 VN∩VT=φ S 是一个非终结符,且至少要在一条产生式的左部

出现 非终结符代表一个语言中的语法成分,如 < 赋值语

句 > ,它是构成程序的一个语法成分,这个符号本身不会在程序中出现,而终结符是组成程序的具体的符号。

Page 31: 第二章  文法和语言

2 文法形式定义上的约定

文法习惯上只将产生式写出。并有如下约定: 第一条产生式的左部是开始符号 , 或用 G[S] 表示 S

是开始符号 用尖括号括起的是非终结符,否则为终结符。或者大

写字母表示非终结符,小写字母表示终结符 G 可写成 G[S], S 是开始符号 希腊字母代表由终结符号和非终结符号组成的符号串

α、 β、 γ 左部相同的产生式 A→α,A→β 可以记为 A→α|β,

其中“ |” 是“或”的意思, α,β 分别称为侯选式

Page 32: 第二章  文法和语言

如:对于文法 G: S→0S1 可写成 G[S]: S→0S1

S→01 S→01

例:文法 G=(VN,VT,P,S)

其中:VN={S}, VT={0, 1}, P={S→0S1,S→01}

开始符为 S

Page 33: 第二章  文法和语言

例:文法 G=(VN,VT,P,S)VN ={ 标识符,字母,数字 } ,VT ={a,b,c,…x,y,z,0,1,…,9},P={< 标识符 >→< 字母 > ,

< 标识符 >→< 标识符 >< 字母 > < 标识符 >→< 标识符 >< 数字 > ,

< 字母 >→ a, …, < 字母 >→z,< 数字 >→0,…,< 数字 >→9 } ,

S=< 标识符 >

例如 :文法 G[S]:

S→A|SA|SDA→a|b|…|zD→0|1|…|9

Page 34: 第二章  文法和语言

3. 推导 (Derivation) 与归约 (Reduction)直接推导和直接归约:

α→β 是文法 G 的产生式,若有 v,w 满足:v=γαδ,w=γβδ, 其中 γ,δ∈V*

则称 v 直接推导出w, 也称 w 直接归约到 v,记作 v w

直接推导就是用产生式的右部替换产生式的左部的过程

直接归约就是用产生式的左部替换产生式的右部的过程

Page 35: 第二章  文法和语言

例 文法 G : S→0S1, S→01 有直接推导: S 0S1 ( S→0S1 )

0S1 00S11 ( S→0S1 ) 00S11 000S111 ( S→0S1 ) 000S111 00001111 ( S→01 )

Page 36: 第二章  文法和语言

推导例题 1

文法 G1: S->bA, A->aA|a 定义了一个什么样的语言?S=>bA=>baS=>bA=>baA=>baaS=>bA=>baA=>baaA=>baaa……S=>bA=>baA=>…=>ba…aL(G1)={ban|n>=1} L(G1) = { 以 b 开头后跟一个或多个 a 的串 }

Page 37: 第二章  文法和语言

推导例题 2

e.g. 文法产生的语言

L(G4)={ambn|m,n1} L(G5) = {anbn|n 1}

G4:

S A B

A a A | a

B b B | b

G5:

S a S b

| ab

Page 38: 第二章  文法和语言

e.g. 文法产生的语言

文法 G4 对句子 aaabb 的推导:S => A B S A B

=> a A B A a A

=> a a A B A a A

=> a a a B A a

=> a a a b B B b B

=> a a a b b B b

A=> aB => abA=> Ab => ab

Page 39: 第二章  文法和语言

e.g. 文法产生的语言

文法 G5 对句子 aaaabbbb 的推导:S => a S b S a S b

=> a a S b b S a S b

=> a a a S b b b S a S b

=> a a a a b b b b S a b

Page 40: 第二章  文法和语言

直接推导序列和广义推导

直接推导序列: 或 +

若存在 v =u0 u1 ... un=w, (n>0)

则称 v + w, v 推导出 w ,或 w 归约到 v (至少有 1 步推导),这个直接推导序列的长度为 n 。广义推导: 或 *

若有 v + w 或 v=w , 则记为 v * w, v 广义推导出 w, w 广义规约到 v (可以包含 0 步推导)

+

*

Page 41: 第二章  文法和语言

三种推导的比较

直接推导()的长度为 1

直接推导序列( + )的长度 n≥1

广义推导( * )的长度≥ 0

Page 42: 第二章  文法和语言

规范推导与规范规约考虑两种特殊推导:最右推导和最左推导,即 对于一个推导序列中的每一步直接推导,都是对最左(最右)非终结符进行替换。最右推导也称规范推导,它的逆过程称为最左规约,也称规范规约。

.若用表示规约,设 A→a 是文法 G 中的一个规则,则对于

xAy xay 有 . xay xAy

Page 43: 第二章  文法和语言

举例例 1: 文法 G[S]: S→AB A→A0|1B B→0|S1

请给出句子 101001 的最左和最右推导。 最左推导: S AB 1B B10B 10S1 10AB1 101BB1

1010B1 101001

最右推导: S AB AS1AAB1 AA01 A1B01 A1001

1B1001 101001

Page 44: 第二章  文法和语言

例 2 文法 G: E→E+T|T

T→T×F|F

F→( E) |i

句子 i+i×i 的推导过程如下:最左推导:

E=>E+T=>T+T=>F+T=>i+T=>i+T×F=>i+F×F

=>i+i×F=>i+i×i

最右推导:E=>E+T=>E+T×F=>E+T×i=>E+F×i=>E+i×i

=> T+i×i=>F+i×i=>i+i×i

Page 45: 第二章  文法和语言

递归规则借助于自身来定义的规则,称为递归规则。如

< 数字序列 >::=< 数字序列 >< 数字 >

递归规则的存在,使得能用有穷个规则来定义无穷的语言。如果一个规则形如 U::=…U… (或 U→xUy ),则该规则是递归的;

如果规则形如 U::=U… (或 U→Uy ),则称左递归的; 如果规则形如 U::=…U (或 U→xU ),则称右递归的。

例: < 标识符表 >::=< 标识符表 >,< 标识符 > (左递归规则)

< 因式 >::=!< 因式 > (右递归规则)

Page 46: 第二章  文法和语言

文法的递归性定义:对于某文法,存在 U∈VN ,

如果 U + …U... , 则称该文法递归于 U ; 如果 U + U… ,则称该文法左递归于 U ; 如果 U + …U ,则称该文法右递归于 U 。例 1: C 语言中:

< 语句 > + …< 语句 > ( 文法右递归于 < 语句 >)

例 2 : U→Vx V→Uy|z (都不递归) 有 U + Uxy ,所以该文法是左递归的。

注:描述程序设计语言的文法必定都是递归的。

Page 47: 第二章  文法和语言

4 .句型、句子、语言的定义 句型和句子

设有文法 G[S] ,若符号串 α 是从开始符推导出来的 , 即 S =>* α ,则称 α 是文法 G 的句型。若 α 仅由终结符组成 , 即 S =>* α ,且α∈VT

* ,则称 α 是文法 G 的句子。例 文法 G[S] : S→0S1 , S→01

因为 S 0S1 00S11 000S111 00001111

所以S,0S1 ,00S11 ,000S111,00001111 都是G 的句型 00001111是 G 的句子由规范推导所得的句型称为规范句型

Page 48: 第二章  文法和语言

语言的定义由文法 G 生成的语言记为 L(G), 它是文法 G 的一切句子的集合 , 即 L(G)={x|S =>* x ,且 x∈VT

* }

例 文法 G : S→0S1 , S→01

S0S1 00S11 03S13 … 0n-1S1n-1 0n1n

L(G)={0n1n|n≥1}

文法和语言的关系:文法 G 生成的每个串都在 L(G) 中L(G) 中的每个串确实能被 G 生成

Page 49: 第二章  文法和语言

根据文法,可以通过推导得到该文法相应的语言;例: G[E]: E→E+T|T T→T×F|F F→(E)|aE E+T T+T F+T a+T a+T×F a+F×F

a+a×F a+a×a

表示一切能用符号 a, +, ×, (, ) 构成的算术表达式

有了语言的要求,也可以为该语言设计文法例:若语言由 0 、 1 符号串组成,串中 0 和 1 的个数

相同,构造其文法为:A → 0B|1CB → 1|1A|0BBC → 0|0A|1CC

Page 50: 第二章  文法和语言

5 .文法的等价

若 L(G1)=L(G2) ,则称文法 G1和G2 是等价的。

例如 文法 G1[A]: A→0R A→01 R→A1

G2[S]: S→0S1 S→01

所定义的语言都是 0n1n

两文法等价

Page 51: 第二章  文法和语言

2.4 文法的类型Chomsky 对文法中的规则施加不同限制,将文法和语言分为四大类:

0 型文法( PSG ) 0 型语言或短语结构语言 1 型文法( CSG ) 1 型语言或上下文有关语言 2 型文法( CFG ) 2 型语言或上下文无关语言 3 型文法( RG ) 3 型语言或正则(正规)语言

Page 52: 第二章  文法和语言

如果对于某文法 G, P 中每个规则具有下列形式: α→β 其中 α V∈ + , β V∈ * ,则该文法 G 为( Chomsky) 0 型文法或短语结构文法,缩写为PSG 。相应的语言称为 0 型语言或短语结构语言。如文法 G ,其中 VN={A,B,S} VT={0,1}

P={ S→0AB 1B→0

B→SA|01 A1→SB1 A0→S0B }

L0(G[S])={ }

0 型文法

Page 53: 第二章  文法和语言

1 型文法 ( 上下文有关 ) :它是 0 型文法的特例, 对 P 中的任一产生式 α→β ,都 |β|≥|α| , 仅仅 S→ε 除外 ,但 S 不得出现在任何产生式的右部。例 文法 G[S]:

S→aSBE S→aBE EB→BEaB→ab bB→bb bE→be eE→ee

1 型文法产生式的一般形式是 A→ , , ∈ V* , A∈VN , β∈V + ,它表示当 A 的上文为且下文为时可把 A 替换成,因此称 1 型文法为上下文有关文法。

Page 54: 第二章  文法和语言

2 型文法(上下文无关文法) :它是 1 型文法的特例,对任一产生式 α→β ,都有α∈VN , β∈(VN∪VT)*

例 文法 G[S]: S→AB A→BS|0 B→SA|1

2 型文法产生式的一般形式是 : A→ ,它表示不管A 的上下文如何都可把 A 替换成,因此被称为上 下文无关文法。通常程序设计语言的文法,可用 2 型文法来描述,因此我们重点研究 2 型文法。如 C, Pascal

Page 55: 第二章  文法和语言

3 型文法 ( 正规文法 ) :它是 2 型文法的特例, 任一产生式 α→β 的形式都为 A→aB或 A→a ,其中 A , B∈VN , a∈VT

例如 文法 G[S]: S→0A|1B|0A→0A|1B|0SB→1B|1|0

在程序设计语言中, 3型文法通常用来描述单词的结构。

Page 56: 第二章  文法和语言

文法类别 产生式形式 产生的语言 说明0 型文法( 短语文法 )

α→βα∈V+ , 且至少含一个非终结符, β∈V*

0 型语言 对产生式基本无限制

1 型文法( 上下文有关文法 )

α→β , |β|≥|α| 1 型语言(上下文有关语言)

将 A 替换成时,必须考虑 A的上下文

2 型文法( 上下文无关文法 )

A→β, A∈VN ,β∈V*

2 型语言(上下文无关语言)

无需考虑A 在上下文中的出现情况

3 型文法( 正规文法 )

A→aB 或 A→a,A,B∈VN , a∈VT

3 型语言( 正规语言 )

产生式全部是规定的形式

Page 57: 第二章  文法和语言

四种文法之间的逐级“包含”关系

2 型文法

1 型文法

3 型文法

0 型文法

Page 58: 第二章  文法和语言

2.5 上下文无关文法及其语法树1 .上下文无关文法 (Context-Free Grammar)

自然语言是上下文有关的。 上下文无关文法有足够的能力描述现今程序设计语言的语

法结构

例:算术表达式: E→i|E+E|E*E|( E)< 赋值语句 >→ i:=E< 条件语句 >→ if < 条件 >then < 语句 >

| if < 条件 > then < 语句 > else < 语句 >

我们更关心上下文无关文法产生的句子的分析

Page 59: 第二章  文法和语言

2. 语法树 ( 推导树 Parse Tree)

作用 : 直观地描述上下文无关文法的句型推导过程。给定文法 G=(VN,VT,P,S) ,对于 G 的任何句型都能构造与之关联的语法树

Page 60: 第二章  文法和语言

语法树的概念定义:语法树是这样的一个语法结构,它的结点由符号组成。根结点对应于识别符号。只有非终结符号对应的结点有子结点。并且,一个结点和它的子结点分别对应于文法中的一个规则的左部和右部。引入语法树的意义:作为识别句子的辅助工具,语法树可以表示句子的结构。这一点对于其后的语义分析有非常重要的意义。

Page 61: 第二章  文法和语言

语法树的相关概念结点:每个树的结点对应于一个符号。结点的名字就是该符号。边:两个结点之间的连线。根结点:没有边进入的结点。分支:某个结点向下射出的边和其结点称为分支。(父子结点,兄弟结点)子树:语法树的某个结点和它向下射出的部分末端结点:没有向下射出的边的结点成为末端结点。在相对于句型的语法树中,末端结点可能是非终结符号。

Page 62: 第二章  文法和语言

语法树的特征给定文法 G,G=(VN,VT,P,S) ,对于 G 的任何句型都能构造与之关联的语法树(推导树)。这棵树具有下列特征:1 、根结点的标记是开始符号 S ;2 、每个结点的标记都是 V 中的一个符号;3 、若一棵子树的根结点为 A ,且其所有直接子孙的标

记从左向右的排列次序为 A1A2…AR ,那么 A::=A1A2..AR 一定是 P 中的一条规则;

4 、若一标记为 A 的结点至少有一个除它以外的子孙,则 A V∈ N

5 、若树的所有叶结点上的标记从左到右排列为字符串w ,则 w 是文法 G 的句型;若 w 中仅含终结符号,则 w 为文法 G 所产生的句子。

Page 63: 第二章  文法和语言

从推导构造语法树方法:把识别符号做为根结点,对每一个直接推导画一个分支,分支的名字是直接推导中被替换的非终结符号,直到再无分支可画结束。

例如:推导S AB AcBd

Accdd abccdd

S

B

B dba

A

c

dc

Page 64: 第二章  文法和语言

语法树的构造过程

S AB AcBd Accdd abccdd

SS

BA

S

B

B d

A

c

S

B

B d

A

c

dc

S

B

B dba

A

c

dc

( 1 )( 2 ) ( 3 )

( 5 )( 4 )

Page 65: 第二章  文法和语言

从语法树构造推导

方法:从分支建立直接推导,然后从语法树中剪去之这个分支,直到无分支可剪。语法树表明了在推导过程中使用了哪条规则和使用在哪个非终结符号上,但它并没有表明使用规则的顺序。一棵语法树可能对应不止一种推导。

Page 66: 第二章  文法和语言

从语法树构造推导的过程例如文法 G[S] :

S::=AB A::=aAb|ab B::=cBd|cd 存在下面的推导可能:

S AB AcBd (4) (3)

Accdd abccdd (2) (1)

S AB abB abcBd abccdd

(从后往前看)

S

B

B dba

A

c

dc

(1)

(2)

(3)

(4)

Page 67: 第二章  文法和语言

例:文法 G: E→E+T|T T→T×F|F F→( E) |i

句型 T+T×F 的推导过程与语法树

E

E T+

T FT ×

E=>E+T

E

E T+

T FT ×

E=>E+T =>E+T×F =>T+T×F

=>T+T =>T+T×F

从语法树中看不出句型中的符号被替代的顺序

从左到右读出叶子结点得到的符号串,为文法的句型。也把该语法树称为该句型的语法树。

Page 68: 第二章  文法和语言

文法 G: E→E+E|E×E|( E) |i句子 i×i+i 对应的语法树

两个不同的最左推导:推导 1: E E+E E×E+E i×E+E i×i+E i×i+i

推导 2: E E×E i×E i×E+E i×i+E i×i+i

i

E E+

E

E E×

i

i

E

E E×

i

E E+

i

i

4. 文法的二义性 (Ambiguity)

Page 69: 第二章  文法和语言

定义 :

如果一个文法存在某个句子对应两棵不同的语法树,则说这个文法是二义的。二义性文法存在某个句子 , 它有两个不同的最左(右)推导

文法 G1:E→ E+E

| E×E|( E)| i

文法 G2:E→T|E+TT→F|T×FF→(E)| i

等价的无二义文法

Page 70: 第二章  文法和语言

为什么要避免文法产生二义性?

二义性的文法将给编译程序的执行带来问题。当编译程序对二义性文法生成的句子结构进行语法分析时,就会产生两种甚至更多种不同的理解。语法结构上的不确定性,必将导致语义处理上的不确定性。因此,希望描述语言的文法是无二义性的。

Page 71: 第二章  文法和语言

如何消除文法的二义性? (1)方法一:不改变文法中原有的语法规则,仅加进一些语法的非形式规定。如 1 :对于文法

G[E]: E → i E → E+E E → E*E E → (E)

规定运算符优先顺序和结合律,即 * 优先于 +, + 、* 服从左结合。 如 2: Pascal 中二义性的消除是通过约定,如在符合 if 语句中, else 子句总是属于最近的尚无 else子句的那个 if 语句。

Page 72: 第二章  文法和语言

如何消除文法的二义性? (2)

方法二:构造一个等价的无二义性的文法,即把排除二义性的规则合并到原有文法中,改写原有的文法。如文法

G[E]: E → i E → E+E E → E*E E → (E)

将运算符的优先顺序和结合规则加到原有文法中,则可构造无二义性的文法

G’[E]: E → T|E+T T → F|T*F F → ( E) |i

Page 73: 第二章  文法和语言

二义性文法的改造

文法的二义性是不可判定的:注意:文法的二义性性与语言二义性的区别

因为可能有两个不同的文法 G1和 G2 ,其中有一个是二义性的,但却有 L(G1)=L(G2) 。如果产生某上下文无关语言的每个文法都是二义性的,则说明该语言是先天二义性的,即该语言是二义性的。

Page 74: 第二章  文法和语言

2.6 句型的分析任务 : 句型分析就是识别一个符号串是否

为某文法的句型,是某个推导的构造过程。对于程序设计语言来说,句型分析就是一

个识别输入符号串是否为语法上正确的程序的过程。

它是一种推导或语法树的构造过程。对于一个给定的符号串,试图按照文法的规则构造其对应的推导,或语法树。

Page 75: 第二章  文法和语言

从左到右的分析算法,即总是从左到右地识别输入符号串 . 句型分析算法采用从左到右的分析算法

句型的分析算法分类 自上而下分析法 (Top-Down parsing) 自下而上分析法 (Bottom-Up parsing)

Page 76: 第二章  文法和语言

2.6.1 自上而下的分析方法定义 :

从文法的开始符号出发,反复使用文法的产生式,寻找与输入符号串匹配的推导。

语法树的构造:将文法的开始符号作为语法树的根,向下逐步建立语法树,使语法树的末端结点符号串正好是输入符号串。

Page 77: 第二章  文法和语言

例 文法 G: S → cAd A → ab A → a识别输入串 w=cabd 是否为该文法的句子

S

推导过程:

c A d

a b

=>cabdS =>cAd

Page 78: 第二章  文法和语言

自上而下方法的主要问题对输入串 cabd 自上而下构造语法树的另一过程

不成功,不成功的原因是选错产生式 A→a

自上而下分析的主要问题是选择产生式 :

假定要被代换的最左非终结符号是 B ,且有 n 条规则: B→A1|A2|…|An ,那么如何确定用哪个右部去替代 B?

S

c A d

a

Page 79: 第二章  文法和语言

2.6.2 自下而上的分析方法

定义 : 从输入符号串开始,逐步进行归约,直至归约到文法的开始符号。

语法树的构造:从输入符号串开始,以它作为语法树的末端结点符号串,自底向上的构造语法树

Page 80: 第二章  文法和语言

例 文法 G: S → cAd A → ab A → a识别输入串 w=cabd 是否为该文法的句子

c a b d

归约过程:

用“ |-” 表示归约,下划线部分为被归约符号

cabd |-cAd |-S

A

S

Page 81: 第二章  文法和语言

自下而上分析的主要问题对输入串 cabd 的两种归约过程

( 1) cabd|-cAd|-S 归约到开始符( 2) cabd|-cAbd 不能归约到开始符 在自下而上的分析方法中,每一步都是

从当前串中选择一个子串加以归约,该子串暂称“可归约串”。

如何确定“可归约串”是自下而上分析的主要问题。

为了刻划“可归约串” , 引入下面的概念

Page 82: 第二章  文法和语言

短语,直接短语和句柄 定义 :

设 αβδ 是文法 G[S] 中的一个句型,如果有 S=>*αAδ 且 A=>+β ,则称 β 是句型αβδ 相对于非终结符 A 的短语特别的如有 A=>β ,则称 β 是句型 αβδ相对于规则 A→β 的简单短语。一个句型的最左简单短语称为该句型的句柄 (Handle)。

句柄就是“可归约串”

Page 83: 第二章  文法和语言

用语法树求短语、句柄短语:(子)树的末端结点形成的符号串是相对于 (子 )树根的短语。简单短语(直接短语):简单子树的末端结点形成的符号串是相对于简单子树根的简单短语。句柄:最左简单子树的末端结点形成的符号串是句柄。

例:对于文法 G[S]: S::=AB

A::=Aa|bB B::=a|Sb

求句型 baSb 的全部短语、直接短语和句柄?

baSb 为句型 baSb 的相对于 S的短语;ba 为句型 baSb 的相对于 A 的短语;a 为句型 baSb 的相对于 B 的短语 , 且为直接短语和句柄;Sb 为句型 baSb 的相对于 B 的短语 , 且为直接短语。

S

SA B

b

a

bSB

Page 84: 第二章  文法和语言

例:文法 G[E]: E→E+T|T T→T×F|F F→( E) | i

的一个句型是 T×F+i ,相应的语法树见右图:

E

E T+

T

T F×

F

i

1 . 因为 E=>* T+i 且 T=>T×F ,所以T×F 是句型相对于 T 的短语,且是相对

于 T→T×F 的直接短语

2 . 因为 E=>* T×F+F 且 F=>i ,所以 i 是句 型相对于 F 的短语,且是相对于F→i 的直接短语

3 . 因为 E=>* E 且 E=>+ T×F+i ,所以T×F+i 是句型相对于 E 的短语

4 . T×F 是最左直接短语,即句柄

Page 85: 第二章  文法和语言

文法 G[E]: E→E+T|TT→T×F|FF→( E) |i

的一个句型 是 T×F+i E

E T+

T

T F×

F

i

虽然 F+i 是句型 T×F+i 的一部分,

但不是短语,因为尽管有 E=>+ F+i,

但是不存在从文法开始符

E=>* T×E 的推导

Page 86: 第二章  文法和语言

短语与语法树从句型的语法树上很容易找出句型的短语 语法树中每棵子树的末端结点构成相对于子树根的

短语 例:文法 G[E] 的句型 T×F+i 语法树:

E

E T+

T

T F×

F

i

五棵子树对应三个短语 T × F, i, T × F+i

两层子树的末端结点构成直接短语 两棵两层子树对应两个直接短语:

T×F, i

位于最左边的两层子树的末端结点构成句柄:T×F

Page 87: 第二章  文法和语言

2.7 有关文法实用中的一些说明有关文法的实用限制 有害规则和多余规则

有害规则: U→U , 无用且引起文法的二义 多余规则:所有句子推导都用不到的规则,表现

形式:a.不可到达:不在任何句型中出现的非终结符的规则,

即除了开始符号外, U 不出现在该文法的任何其他的规则的右部。

b.不可终止:不可推出终结符号串的非终结符的规则,若在推导中使用该规则,则在也不能推出终结符号串。

Page 88: 第二章  文法和语言

例:文法 G[S]:( 1 ) S→Be ( 2 ) B→Ce ( 3) B→Af

( 4 ) A→Ae ( 5 ) A→e( 6) C→Cf

( 7) D→f

多余规则为: ( 7 )不可到达 ( 6 )不可终止 ( 2 )也是多余的

Page 89: 第二章  文法和语言

第 2 章小结

1 1 形式语言基础 形式语言基础 字母表、符号串、空串、字母表、符号串、空串、 符号串的长度、连接、(正则)闭包符号串的长度、连接、(正则)闭包2 2 文法和语言的定义文法和语言的定义★3 3 重要概念重要概念★★

(规范)推导、(规范)规约、句子、语言、(规范)推导、(规范)规约、句子、语言、句型、短语、简单短语、句柄句型、短语、简单短语、句柄

4 4 文法的表示文法的表示5 5 文法和语言的分类文法和语言的分类

句型句型→→推导的语法树推导的语法树→→短语短语→→简单短语简单短语→→句柄句柄文法文法←→←→语言语言←→←→句子句子

认真看书,理解概念。

Page 90: 第二章  文法和语言

作业 1 :教材 P25- 1 题目

作业 2 :教材 P26- 5 题目

作业 3 :给出生成下述语言的上下文无关文法: (1) { an bn am bm | n,m>=0 }

(2) { 1n 0m 1m 0n | n,m>=0 }

Page 91: 第二章  文法和语言

作业 4 :设有文法 G1 G1: S→SaQ Q∣ Q→QbR R∣ R→cSd e∣1 .证明句型 QbRae 是规范句型2 .给出句型 QbRae 的短语,直接短语和句柄。

作业 5 :文法 G[S]( 1) S→aSBE ( 2) S→aBE ( 3) EB→BE ( 4) aB→ab ( 5) bB→bb( 6) bE→be ( 7) eE→ee 所定义的语言