41
第第第 第第第第第第 第第第 第第第第第第 第第第第第第第第第第第第第第第第第第第第第第第第第第第第 第第第第第第 第第第第第第第第第第第第第 第第第第第第第第第第第第第第 第第第 第第第第 第第第第第第——第第第第第第第第第第第 第第第第第第第第第第第第第第第 第第 . 第第 第第第第第第 第第第第第第第第第第第第第第第第第第第第 第第第第第 一,。 第第 第第第第第第 第第第第第第第第第第第第第第第第第第第第 第第第第第 一,。 第第第第第第第 第第第第第第第第第第第第第第第第 、。 第第第第第第第 第第第第第第第第第第第第第第第第 、。 第第第第第第第第第第第第第第第第第第

第二章 形式语言概论

  • Upload
    duer

  • View
    137

  • Download
    0

Embed Size (px)

DESCRIPTION

第二章 形式语言概论. 编译程序使得高级语言源程序所描述的功能得以在计算机上实现。编译程序的设计者就是高级语言的 实现者 ,源程序的编写者就是高级语言的 使用者 ,他们必须 遵循同样的准则 —— 高级语言程序的构成规则,才能使写出的源程序能够被成功地翻译 . 构造一个编译程序,首先要了解被编译的源程序的结构及其含义。要搞清楚源语言的词法规则、语法规则和语义规则是如何描述的。 文法描述的就是高级语言程序的构成规则 。. 第二章 形式语言概论. 本章主要介绍形式语言理论中的一些最基本的概念和基础知识,它是学习以后各章节的基础。 - PowerPoint PPT Presentation

Citation preview

Page 1: 第二章 形式语言概论

第二章 形式语言概论第二章 形式语言概论编译程序使得高级语言源程序所描述的功能得以在计算机上实现。编译程序的设计者就是高级语言的实现者,源程序的编写者就是高级语言的使用者,他们必须遵循同样的准则——高级语言程序的构成规则,才能使写出的源程序能够被成功地翻译 .

构造一个编译程序,首先要了解被编译的源程序构造一个编译程序,首先要了解被编译的源程序的结构及其含义。要搞清楚源语言的词法规则、的结构及其含义。要搞清楚源语言的词法规则、语法规则和语义规则是如何描述的。 语法规则和语义规则是如何描述的。 文法描述的就是高级语言程序的构成规则。

Page 2: 第二章 形式语言概论

第二章 形式语言概论第二章 形式语言概论本章主要介绍形式语言理论中的一些最基本章主要介绍形式语言理论中的一些最基本的概念和基础知识,它是学习以后各章本的概念和基础知识,它是学习以后各章节的基础。节的基础。大多数程序设计语言的单词和语句是由正大多数程序设计语言的单词和语句是由正规文法和上下文无关文法来描述的。规文法和上下文无关文法来描述的。有穷自动机是词法分析的理论基础。有穷自动机是词法分析的理论基础。

Page 3: 第二章 形式语言概论

2.1 2.1 语言成分语言成分

一个语言的成分包括字母表(一个语言的成分包括字母表( AlphabAlphabetet )) ,, 文法文法 (Grammar)(Grammar) 以及它的语义。 以及它的语义。 本节将主要讨论字母表和符号串的一本节将主要讨论字母表和符号串的一些基本概念。些基本概念。

Page 4: 第二章 形式语言概论

字母表与符号字母表与符号 : :字母表是元素的非空有穷集合。字母表是元素的非空有穷集合。字母表中的元素称为符号。举例说明。字母表中的元素称为符号。举例说明。

符号串及其运算符号串及其运算 : :① ① 符号串的概念 ② 符号串的长度。符号串的概念 ② 符号串的长度。

③ ③ 符号串的连接。符号串的连接。 ④ 符号串集合的乘积。④ 符号串集合的乘积。 ⑤ ⑤ 符号串的方幂。符号串的方幂。 ⑥ 符号串集合的方幂。 ⑥ 符号串集合的方幂。 ⑦ ⑦ 符号串集合的正闭包。符号串集合的正闭包。 ⑧ 符号串集合的自反闭⑧ 符号串集合的自反闭

包。包。

Page 5: 第二章 形式语言概论

形式语言形式语言形式语言是字母表上按某种规则构成的所形式语言是字母表上按某种规则构成的所有串的集合,这些串称为句子或字。对于有串的集合,这些串称为句子或字。对于一个具体的语言,都有语法和语义两个方一个具体的语言,都有语法和语义两个方面,形式语言是指不考虑语言的具体意义。面,形式语言是指不考虑语言的具体意义。形式语言的表示方法形式语言的表示方法

有穷语言:枚举法有穷语言:枚举法 无穷语言:文法无穷语言:文法

Page 6: 第二章 形式语言概论

2.2 2.2 产生式文法和语言产生式文法和语言

文法文法 (Grammar)(Grammar) 是对语言结构的定义是对语言结构的定义和描述,换句话说,在形式上用来描述语和描述,换句话说,在形式上用来描述语言语法结构的就是文法。通常是由一组规言语法结构的就是文法。通常是由一组规则构成的。一个程序语言的文法的就是用则构成的。一个程序语言的文法的就是用适当条数的规则把该程序语言全部成分描适当条数的规则把该程序语言全部成分描述出来。述出来。

Page 7: 第二章 形式语言概论

2.2.1 2.2.1 产生式文法产生式文法 定义定义 2.12.1 产生式文法定义成一个四元组产生式文法定义成一个四元组 G=(VG=(VNN ,, VVTT ,, SS ,, P)P) ,, VVTT:: 非空有限的终结符号集非空有限的终结符号集 (( 符号表符号表 )) ;; VVNN:: 非空有限的非终结符号集非空有限的非终结符号集 (( 变量表变量表 )) ;; S:S: 开始符号开始符号 (( 识别符号识别符号 )) ,是文法,是文法 GG 规定的最规定的最终目标;终目标; P:P: 产生式(规则)的集合。产生式(规则)的集合。 其中其中 VVNN∩V∩VTT= = ,, SSVVNN 。我们令。我们令 V=VV=VNN∪V∪VTT ,,则则 PP 中产生式的一般形式为中产生式的一般形式为 AA|| A AVVNN 且 且 ,, VV ++ 或 或 A::=A::=|| ( ( 本书中统一采用“本书中统一采用“ AA||”” 的表示的表示方法方法 )) 。。

Page 8: 第二章 形式语言概论

2.2.2 2.2.2 上下文无关文法上下文无关文法定义定义 2.22.2 文法文法 GG 是一个四元组,是一个四元组, G=(VG=(V

NN ,,VVTT ,, PP ,, S)S) ,其中,,其中, VVNN 、、 VVTT 分别是非空有分别是非空有限的非终结符号集和终结符号集,限的非终结符号集和终结符号集, VVNN∩∩VVTT== ,,PP 是产生式集,是产生式集, SSVVNN 称为文法的称为文法的识别符号或开识别符号或开始符号始符号。开始符号。开始符号 SS 必须至少在某个产生式的必须至少在某个产生式的左部出现一次。左部出现一次。

Page 9: 第二章 形式语言概论

程序设计语言表达式的文法程序设计语言表达式的文法

G1=(G1=(VVNN, , VVTT ,, SS ,, PP))

VVNN ={E} ={E} VVTT =(i,+,*,(,)} =(i,+,*,(,)} S=ES=E P={E→i,E→E+E,E→E*E,E→(E)}P={E→i,E→E+E,E→E*E,E→(E)}

Page 10: 第二章 形式语言概论

2.2.3 2.2.3 上下文无关文法定义的语上下文无关文法定义的语言言定义定义 2.32.3 设文法设文法 G=(VG=(VNN ,, VVTT ,, PP ,, S)S) ,, A→A→ 是其中的产生式,若有符号串是其中的产生式,若有符号串 ,, (V(VNN∪V∪VTT)*)* ,,使得 使得 U=U=AA ,, w=w= 则称则称 ww 为为 UU 应用产生式应用产生式 A→A→ 所得到的直接推导所得到的直接推导(Direct Deriavtion)(Direct Deriavtion) ,也称,也称 ww 可直接归约到可直接归约到 U,U, 记记为 为 UUw ,w , 即 即 AA特别的,当特别的,当 ==== 时,有时,有 AA 即每个产生式的右部都是它左部的直接即每个产生式的右部都是它左部的直接推导,符号“推导,符号“”仅指“推导一步”的意思。”仅指“推导一步”的意思。 举例说明举例说明 ..

Page 11: 第二章 形式语言概论

2.2.3 2.2.3 上下文无关文法定义的语上下文无关文法定义的语言言

定义定义 2.4 2.4 如果存在一个直接推导的序列如果存在一个直接推导的序列 v=v=001122……nn=w =w (( n>0n>0 ))则称符号串则称符号串 ww 为符号串为符号串 uu 的一个推导,或称的一个推导,或称““ ww 可归约到可归约到 v”v” 记为记为 推导举例推导举例 ..

wu

Page 12: 第二章 形式语言概论

2.3 2.3 文法的分类文法的分类2.3.1 2.3.1 文法分类文法分类乔姆斯基根据产生式的形式把文法分为乔姆斯基根据产生式的形式把文法分为 44

类类 ::

00 型文法型文法 (短语文法、无限制文法) (短语文法、无限制文法) 11 型文法(上下文有关文法)型文法(上下文有关文法) 22 型文法(上下文无关文法)型文法(上下文无关文法) 33 型文法(左、右线性文法和正规文型文法(左、右线性文法和正规文

法)法)

Page 13: 第二章 形式语言概论

00 型文法型文法

产生式具有以下形式:产生式具有以下形式: →→

其中,其中, (V(VNN∪V∪VTT))++ ,, (V(VNN∪V∪VTT)*)*

Page 14: 第二章 形式语言概论

11 型文法(上下文有关文法)型文法(上下文有关文法) 11 型文法型文法 GG 的产生式具有以下形式:的产生式具有以下形式:→→ 要求: 要求:11≤∣≤∣ ≤∣ ∣≤∣ ∣∣∣其中其中 ==11AA22 ;; ==1122 ;; 11 ,, 22(V(VNN∪V∪VTT)*)* ;;AAVVNN ;;(V(VNN∪V∪VTT))++ 。。例 例 11 型文法型文法 GG66=(V=(VNN ,, VVTT ,, PP ,, S)S)其中, 其中, VVNN={S={S ,, XX ,, YY ,, Z}Z} VVTT== (( xx ,, yy ,, zz )) P={S→xSYZP={S→xSYZxYZ, xY→xyxYZ, xY→xy ,, yY→yy, yZ→yzyY→yy, yZ→yz ZY→YZ, zZ→zz}ZY→YZ, zZ→zz}

Page 15: 第二章 形式语言概论

22 型文法(上下文无关文法)型文法(上下文无关文法) 在在 11 型文法的产生式中上下文型文法的产生式中上下文 11 和和 22 用空符用空符号串号串代替,则有以下形式的产生式称为代替,则有以下形式的产生式称为 22 型文型文法:法: A→A→

其中,其中, AAVVNN ,, (V(VNN∪V∪VTT))++ 。。例 例 22 型文法型文法 GG33=(V=(VNN ,, VVTT ,, PP ,, E)E)其中, 其中, VVNN={E={E ,, TT ,, F}F} VVTT={+={+ ,, ** ,, (( ,, )) ,, i }i } P={E→E+TP={E→E+TTT ,, T→TT→TFFFF ,, F→(E) F→(E) i }i }

Page 16: 第二章 形式语言概论

33 型文法(右线性文法和正规文型文法(右线性文法和正规文法法 )) 如果如果 PP 中的产生式只含有下面的两种形式中的产生式只含有下面的两种形式:: A→ A→ A→ A→ B B 则称该文法为右线性文法,则称该文法为右线性文法,

其中,其中, AA ,, BBVVNN , , VVTT** 。。例 右线性文法例 右线性文法 GG44=(V=(VNN ,, VVTT ,, PP ,, S)S)其中, 其中, VVNN={S={S ,, AA ,, B}B} VVTT={0, 1 }={0, 1 } P={S→0P={S→0111A1A0B0B ,, A→1AA→1A0B0B ,, B→0B→01100B }B }

Page 17: 第二章 形式语言概论

33 型文法(右线性文法和正规文型文法(右线性文法和正规文法法 ))

在正规文法中,在正规文法中, PP 中的每个产生式中的每个产生式 (S→(S→ 例外,例外,SS 为文法的开始符号为文法的开始符号 )) 只有两种形式:只有两种形式: A→a A→a ,, A→A→aB aB 。其中 。其中 AA ,, BBVVNN ,, aaVVTT 。此外,如果。此外,如果 S→S→是是 PP 中的一个产生式,那么中的一个产生式,那么 SS 不能出现在任何产生不能出现在任何产生式的右边。式的右边。例 正规文法例 正规文法 GG55(S)(S) (十进制实数)(十进制实数)SSdB|+A|-A|·GdB|+A|-A|·GAAdB|·GdB|·GBBdB|·H|ddB|·H|dGGdHdH

HHdH|d dH|d 其中其中 dd 代表十进制数字。代表十进制数字。

Page 18: 第二章 形式语言概论

2.3.22.3.2 文法分类的意义(文法分类的意义( 11 ))00 型文法型文法 :0:0 型语言(递归可枚举语言)使型语言(递归可枚举语言)使用图灵机来识别用图灵机来识别11 型文法型文法 :1:1 型语言 型语言 (( 上下文有关语言上下文有关语言 ) ) 使使用空间线性界限自动机来识别用空间线性界限自动机来识别22 型文法型文法 :2:2 型语言型语言 (( 上下文无关语言上下文无关语言 ) ) 使使用下推自动机来识别用下推自动机来识别33 型文法型文法 :3:3 型语言型语言 (( 正规语言、正则语言)正规语言、正则语言)使用有穷自动机来识别使用有穷自动机来识别

Page 19: 第二章 形式语言概论

2.3.22.3.2 文法分类的意义(文法分类的意义( 22 ))程序设计语言的词法规则(单词)属于正程序设计语言的词法规则(单词)属于正规文法,使用有穷自动机来识别。规文法,使用有穷自动机来识别。程序设计语言的语法和语义描述属于上下程序设计语言的语法和语义描述属于上下文无关文法和上下文有关文法范畴,为降文无关文法和上下文有关文法范畴,为降低语法分析的难度,大部分语法规则使用低语法分析的难度,大部分语法规则使用上下文无关文法来描述,使用下推自动机上下文无关文法来描述,使用下推自动机来识别。来识别。

Page 20: 第二章 形式语言概论

2.4 2.4 语言和语法语言和语法2.4.1 2.4.1 句型、句子和语言(句型、句子和语言( 11 ))定义定义 2.6 2.6 设设 SS 是文法是文法 GG 的识别的识别符号,如果 ,符号,如果 , 则称符号串则称符号串 uu 为文法为文法 GG 的句的句型。型。举例说明。举例说明。

uS

Page 21: 第二章 形式语言概论

2.4.1 2.4.1 句型、句子和语言句型、句子和语言(( 22 ))

定义定义 2.7 2.7 设设 SS 是文法是文法 GG 的识别符号,的识别符号,若 ,若 , uuVVTT

** ,则称符号串,则称符号串 uu 为文法为文法 GG 的的子。子。定义定义 2.8 2.8 设设 SS 是文法是文法 GG 的识别符号,的识别符号,文法文法 GG 的语言的语言 L(G)={u| L(G)={u| 且且 uu VVTT

**}} ,,即文法的语言是文法的所有句子构成的即文法的语言是文法的所有句子构成的集合。集合。

uS

uS+

Page 22: 第二章 形式语言概论

文法和语言综述(文法和语言综述( 11 )) 给定一个文法,就能从结构上唯一地确定其语言,给定一个文法,就能从结构上唯一地确定其语言,即即 G→L(G)G→L(G) 给定一种语言,能确定其文法,但这种文法不是给定一种语言,能确定其文法,但这种文法不是唯一的。唯一的。

例如:标识符文法:例如:标识符文法: G1[I]G1[I] I→L|IL|IDI→L|IL|ID L→a|b|c|…|x|y|z|A|B|C|…|X|YL→a|b|c|…|x|y|z|A|B|C|…|X|Y ︱︱ ZZ D→0|1|2|3|…|9D→0|1|2|3|…|9G2[I]G2[I] : 右线性文法:: 右线性文法: I → aB|a I → aB|a B →aB| dB| a |d B →aB| dB| a |d G3[I]G3[I] : 左线性文法:: 左线性文法: I → a| Ia| Id I → a| Ia| Id aa 代表字母、代表字母、 d d 代表数字代表数字

Page 23: 第二章 形式语言概论

文法和语言综述(文法和语言综述( 22 ))给定文法,如何确定该文法的语言?给定文法,如何确定该文法的语言?

从已知文法确定语言的中心思想是从已知文法确定语言的中心思想是 :: 从从文法的开始符号出发文法的开始符号出发 ,, 反复连续地使用规则反复连续地使用规则 ,,对非终结符施行替换和展开对非终结符施行替换和展开 ,, 找出句子的规找出句子的规律律 ,, 用式子或自然语言描述出来。用式子或自然语言描述出来。

举例说明。举例说明。

Page 24: 第二章 形式语言概论

文法和语言综述(文法和语言综述( 33 ))给定语言给定语言 ,, 如何构造其文法如何构造其文法 ??

例例 : : 设字母表设字母表 Σ={aΣ={a ,, b}b} ,试设计一个文法,,试设计一个文法,使其描述的语言为使其描述的语言为

L={aL={a2n2n ,, bb2n2n|n≥1}|n≥1}

G=G= (( VVNN ,, VVT T ,, PP ,, SS ))其中其中 VVN N ={A={A ,, BB ,, D}, VD}, VTT ={a ={a ,, b}b}

P={ A→aa|aaB|bb|bbDP={ A→aa|aaB|bb|bbD B→aa|aaBB→aa|aaB D→bb|bbD}D→bb|bbD} S=AS=A

Page 25: 第二章 形式语言概论

例例 :: 设字母表设字母表 Σ={aΣ={a ,, b}b} ,试设计一个文法,,试设计一个文法,使其描述的语言使其描述的语言 L={abL={abnna|n≥0}a|n≥0} 。 。

Page 26: 第二章 形式语言概论

2.4.2 2.4.2 语法树(语法树( 11 )) 在自然语言中,可通过树型表示直观地分析在自然语言中,可通过树型表示直观地分析句子结构;在形式语言中,则是通过语法树直句子结构;在形式语言中,则是通过语法树直观地分析文法的句型结构。观地分析文法的句型结构。

句子结构句子结构

句 子

主语 系词

定语

名词

Physics

冠词

the

前置词

ofareThey

连接词

and

名词

students

名词

teachers

名词

Department.

表语

代词

Page 27: 第二章 形式语言概论

2.4.2 2.4.2 语法树语法树 设文法设文法 G=(VG=(VNN ,, VVTT ,, PP ,, S)S) ,对于文法,对于文法 GG的任意一个句型都存在一个相应的语法树:的任意一个句型都存在一个相应的语法树: ① ① 树的根结点标记是文法的识别符号树的根结点标记是文法的识别符号 SS ;; ② ② 每个结点上的标记都是文法字汇表中的符号;每个结点上的标记都是文法字汇表中的符号; ③ ③ 若一棵子树的标记为若一棵子树的标记为 AA ,且所有直接后结点,且所有直接后结点从左向右排列的顺序为从左向右排列的顺序为 BB11 ,, BB22 ,…,,…, BBnn ,则,则(A(A→→BB11BB22…B…Bnn))PP ;; ④④ 如果如果 T1T1 是根结点的唯一子树是根结点的唯一子树 ,, 且标记为且标记为 εε ,,则一定有则一定有 S S → → εε 在在 PP 中;中; ⑤⑤ 若树的所有末端结点上的标记从左向右排列若树的所有末端结点上的标记从左向右排列为字符串为字符串 w,w, 则则 ww 是是 GG 的句型的句型 ,, 若若 ww 仅含终结符仅含终结符号号 ,, 则则 ww 是是 GG 所产生的句子所产生的句子 .(.( 举例举例 ))

Page 28: 第二章 形式语言概论

2.4.3 2.4.3 语法树的生成过程语法树的生成过程 也称为也称为推导树,推导树,是对句子或句型推导过是对句子或句型推导过程的图形表示法。程的图形表示法。从文法的开始符号出发,每推导一步,语法从文法的开始符号出发,每推导一步,语法树向下伸展一层。树向下伸展一层。【例【例 11 】设有文法】设有文法 G[E]G[E] :: E→E+T E-T T∣ ∣E→E+T E-T T∣ ∣ T→T*F T/F F∣ ∣T→T*F T/F F∣ ∣ F→F→ (( EE )∣)∣ ii

给出句型给出句型 (T+i(T+i22)*i)*i11-F-F 的语法树的语法树

Page 29: 第二章 形式语言概论

2.5 2.5 文法和语言的一些特性文法和语言的一些特性 2.5.1 2.5.1 无用非终结符号无用非终结符号 如果文法的某个非终结符不出现在文法的任何一个句型如果文法的某个非终结符不出现在文法的任何一个句型中,并且不能从它推导出终结符号串,则称该非终结符为中,并且不能从它推导出终结符号串,则称该非终结符为无用非终结符号。无用非终结符号。 (P30-(P30-例例 2.132.13))

2.5.2 2.5.2 不可达文法符号不可达文法符号 如果一个非终结符(非识别符号)不出现在文法的任何如果一个非终结符(非识别符号)不出现在文法的任何一条产生式的右部,则称该非终结符为不可达文法符号。一条产生式的右部,则称该非终结符为不可达文法符号。 文法中的任意非终结符文法中的任意非终结符 AA 应满足如下两个条件应满足如下两个条件 ::

(1)A(1)A 必须在文法的某个句型中出现。必须在文法的某个句型中出现。 (2)(2) 必须能从必须能从 AA 推导出终结符号串。推导出终结符号串。

Page 30: 第二章 形式语言概论

2.5.3 2.5.3 可空非终结符可空非终结符22 型文法的产生式要求以下形式:型文法的产生式要求以下形式: A→A→其中,其中, AAVVNN ,, (V(VNN∪V∪VTT))++ 。对。对 22 型文型文法可进行扩充,令法可进行扩充,令 (V(VNN∪V∪VTT))** ,允许有,允许有以下形式的产生式:以下形式的产生式: A→A→此产生式称为空产生式,此产生式称为空产生式, AA 称为可空非称为可空非

终结符。终结符。

Page 31: 第二章 形式语言概论

2.5.4 2.5.4 最左、最右推导和规范推导最左、最右推导和规范推导(( 11 ))

定义定义 2.9 2.9 在在 xUyxUyxuyxuy 直接推导中,若直接推导中,若 xxVVTT** ,, UU

VVN N 即即 UU 是符号串是符号串 xUyxUy 中最左非终结符,则称此直接中最左非终结符,则称此直接推导为推导为最左直接推导。若一个推导的每一步直接推导都是最最左直接推导。若一个推导的每一步直接推导都是最左直接推导,那么此推导称为最左推导。左直接推导,那么此推导称为最左推导。定义定义 2.10 2.10 在在 xUy::=xuyxUy::=xuy 直接推导中,直接推导中, yyVVTT

**,U,UVVNN ,,即即 UU 是符号串是符号串 xUyxUy 中最右非终结符,则称此直接推导中最右非终结符,则称此直接推导为最右直接推导。若一个推导的每一步直接推导都是为最右直接推导。若一个推导的每一步直接推导都是最右直接推导,则称此推导为最右推导。最右直接推导,则称此推导为最右推导。最右直接推导又称为规范直接推导,最右推导又称最右直接推导又称为规范直接推导,最右推导又称为规范推导。为规范推导。

Page 32: 第二章 形式语言概论

2.5.4 2.5.4 最左、最右推导和规范推导最左、最右推导和规范推导(( 22 ))定义定义 2.11 2.11 假定假定 xx11xx22……xxnn 是一个最左是一个最左推导,我们称序列推导,我们称序列 XXnn ,, XXn-1n-1 ,…,… XX11 是一是一个最右归约。个最右归约。定义定义 2.12 2.12 假定假定 xx11xx22……xxnn 是一个最右是一个最右推导,我们称序列推导,我们称序列 XXnn ,, XXn-1n-1 ,…,… XX11 是一是一个最个最 左归约。左归约。最左推导的逆过程是最右归约,最右推导最左推导的逆过程是最右归约,最右推导的逆过程是最左归约。的逆过程是最左归约。

Page 33: 第二章 形式语言概论

2.5.5 2.5.5 二义性(二义性( 11 ))定义定义 2.13 2.13 一个文法,如果它的一个句子有两棵一个文法,如果它的一个句子有两棵或两棵以上的语法树,则称此句子具有二义性。如或两棵以上的语法树,则称此句子具有二义性。如果一个文法含有二义性的句子,则该文法具有二义果一个文法含有二义性的句子,则该文法具有二义性。性。例如:表达式的文法例如:表达式的文法 。 。 二义性的文法将给编译程序的执行带来问题。二义性的文法将给编译程序的执行带来问题。对于二义性文法的句子,当编译程序对它的结构进对于二义性文法的句子,当编译程序对它的结构进行语法分析时,就会产生两种甚至更多种不同的解行语法分析时,就会产生两种甚至更多种不同的解释。由于语法结构上的不确定性,将必然会导致语释。由于语法结构上的不确定性,将必然会导致语义处理上的不确定性。对于二义性的文法我们可以义处理上的不确定性。对于二义性的文法我们可以利用文法的等价性来消除文法的二义性,以利于语利用文法的等价性来消除文法的二义性,以利于语法分析的进行。法分析的进行。

Page 34: 第二章 形式语言概论

2.5.5 2.5.5 二义性(二义性( 22 ))例:定义某种程序设计语言语句的文法,证明是否有二义例:定义某种程序设计语言语句的文法,证明是否有二义性并消除之。性并消除之。

S→if b S if b S else S A( ∣ ∣S→if b S if b S else S A( ∣ ∣ 其他语句其他语句 )) 分析 该文法的句子 分析 该文法的句子 if b if b A else A if b if b A else A 对应两棵不同的语对应两棵不同的语

法树。法树。改写文法:改写文法:

(( 11 )不改变现有的规则,加进一项语法规定。)不改变现有的规则,加进一项语法规定。 elseelse 与前面最近的不带 与前面最近的不带 elseelse 的 的 ifif 相对应。相对应。 (( 22 )改写文法)改写文法 G G 为为 G′G′ :: S→S1 S2∣S→S1 S2∣ S1→if b S1 else S2 A∣S1→if b S1 else S2 A∣ S2→if b S if b S1 else S2∣S2→if b S if b S1 else S2∣ 规定规定 if if 和和 elseelse 之间只能是之间只能是 if-elseif-else 语句或其他语句。语句或其他语句。

Page 35: 第二章 形式语言概论

2.5.5 2.5.5 二义性(二义性( 33 ))

文法的二义性和语言的二义性是两个不文法的二义性和语言的二义性是两个不同的概念。同的概念。 文法的二义性不能用算法来判定。文法的二义性不能用算法来判定。

Page 36: 第二章 形式语言概论

2.6 2.6 分析方法简介分析方法简介一个分析器或分析自动机是这样一种一个分析器或分析自动机是这样一种系统,它能够根据给定的文法系统,它能够根据给定的文法 GG ,构造,构造语言语言 L(G)L(G) 的任意推导。分析也可看作的任意推导。分析也可看作是语法树的构造过程。 是语法树的构造过程。 分析的方法很多,可归纳为两类,一分析的方法很多,可归纳为两类,一类是自上而下分析方法,另一类是自下类是自上而下分析方法,另一类是自下而上分析方法。而上分析方法。

Page 37: 第二章 形式语言概论

2.6.12.6.1 自上而下分析方法自上而下分析方法 自上而下分析方法的基本思想是从自上而下分析方法的基本思想是从文法的开始符号出发,利用其中的产文法的开始符号出发,利用其中的产生式,逐步推导出待分析的符号串。生式,逐步推导出待分析的符号串。如果能推导出这个符号串,则表明此如果能推导出这个符号串,则表明此符号串是该文法的一个句型或句子,符号串是该文法的一个句型或句子,否则便不是。否则便不是。

Page 38: 第二章 形式语言概论

2.6.2 2.6.2 确定的自上而下分析方法确定的自上而下分析方法(( 11 )) 当文法的某一个非终结符有几条产生式、而且当文法的某一个非终结符有几条产生式、而且每条产生式右部首符号都是终结符时,应保证它每条产生式右部首符号都是终结符时,应保证它们是互不相同的终结符。们是互不相同的终结符。 例 设文法例 设文法 GG1818[S][S] :: S→aBcS→aBcbCdbCd B→eBB→eBff C→dCC→dCcc

试检查符号串试检查符号串 aefcaefc 是不是该文法的句子。是不是该文法的句子。

Page 39: 第二章 形式语言概论

2.6.2 2.6.2 确定的自上而下分析方法(确定的自上而下分析方法( 22 ))

上例推导过程:上例推导过程:S→aBcS→aBc ,, SSaBcaBc ;;B→eBB→eB ,, SSaBcaBcaeBcaeBc ;;B→fB→f ,, SSaBcaBcaeBcaeBcaefcaefc ;;

该例属确定的自上而下分析方法。该例属确定的自上而下分析方法。

Page 40: 第二章 形式语言概论

2.6.3 2.6.3 自下而上分析方法自下而上分析方法

自下而上分析方法的基本思想是从待检自下而上分析方法的基本思想是从待检查的符号串出发,看最终是否能归约(推查的符号串出发,看最终是否能归约(推导的逆过程)到文法的识别符号。如果能导的逆过程)到文法的识别符号。如果能归约到文法的识别符号,则表明此待检查归约到文法的识别符号,则表明此待检查的符号串是该文法的一个句型或句子,否的符号串是该文法的一个句型或句子,否则便不是。则便不是。

Page 41: 第二章 形式语言概论

2.6.4 2.6.4 文法在内存中的表示文法在内存中的表示 用语法图的表格结构表示文法。一用语法图的表格结构表示文法。一个文法的语法图由该文法所有非终结个文法的语法图由该文法所有非终结符号的定义图组成。每个非终结符号符号的定义图组成。每个非终结符号的定义图是一个结构型数据。的定义图是一个结构型数据。 在自上而下分析方法中,用这种语在自上而下分析方法中,用这种语法图表示文法有利于消除左递归,也法图表示文法有利于消除左递归,也有助于提取左因子。有助于提取左因子。