第二章 文法和语言 2.1 文法的基本概念

56
第第第 第第第第第 第第第 第第第第第 2.1 2.1 第第第第第第第 第第第第第第第 第第第第第第第第 第第第第 第 第第第第第第 第第 第第第第第第 一一 ,一, 第第第第第第第第 第第第第 第 第第第第第第 第第 第第第第第第 一一 ,一, 第第第第第第第第第第第第 第第第 第第第第第第第第第 第第第第 第第第第第第第第第第 第第第 。一一,一 第第第第第第第第第第第第 第第第 第第第第第第第第第 第第第第 第第第第第第第第第第 第第第 。一一,一 第第第 第第第第第第第第第第第第第第第第第第第第第第第第第第第第 第第第第第第第第第第第第 ,。 第第第 第第第第第第第第第第第第第第第第第第第第第第第第第第第第 第第第第第第第第第第第第 ,。 第第第第第第

description

第二章 文法和语言 2.1 文法的基本概念 一个程序设计语言是一个记号系统,如自然语言一样,它的完整的定义应包括语法和语义两方面。所谓一个语言的语法是指一组规则,用它可以形成和产生一个合适的程序,目前在程序设计语言的识别中广泛使用的是上下文无关的文法。在这理主要介绍文法和语言的概念。. 例:设有文法: < 句子 >→< 主语 >< 谓语 > < 主语 >→< 冠词 >< 形容词 >< 名词 > < 冠词 >→the < 形容词 >→big < 谓语 >→< 动词 >< 直接宾语 > < 动词 >→ate|caught < 直接宾语 >→< 冠词 >< 名词 > - PowerPoint PPT Presentation

Transcript of 第二章 文法和语言 2.1 文法的基本概念

Page 1: 第二章  文法和语言 2.1  文法的基本概念

第二章 文法和语言第二章 文法和语言2.1 2.1 文法的基本概念文法的基本概念 一个程序设计语言是一个记号系统,如自然语言一样,一个程序设计语言是一个记号系统,如自然语言一样,它的完整的定义应包括语法和语义两方面。所谓一个语言的语它的完整的定义应包括语法和语义两方面。所谓一个语言的语法是指一组规则,用它可以形成和产生一个合适的程序,目前法是指一组规则,用它可以形成和产生一个合适的程序,目前在程序设计语言的识别中广泛使用的是上下文无关的文法。在在程序设计语言的识别中广泛使用的是上下文无关的文法。在这理主要介绍文法和语言的概念。这理主要介绍文法和语言的概念。

Page 2: 第二章  文法和语言 2.1  文法的基本概念

例:设有文法:例:设有文法:<< 句子句子 >→<>→< 主语主语 ><>< 谓语谓语 >><< 主语主语 >→<>→< 冠词冠词 ><>< 形容词形容词 ><>< 名词名词 >><< 冠词冠词 >→the>→the<< 形容词形容词 >→big>→big<< 谓语谓语 >→<>→< 动词动词 ><>< 直接宾语直接宾语 >><< 动词动词 >→ate|caught>→ate|caught<< 直接宾语直接宾语 >→<>→< 冠词冠词 ><>< 名词名词 >><< 名词名词 >→mouse|cat>→mouse|cat

Page 3: 第二章  文法和语言 2.1  文法的基本概念

则:则:<< 句子句子 >=><>=>< 主语主语 ><>< 谓语谓语 >=><>=>< 冠词冠词 ><>< 形容词形容词 ><>< 名名词词 ><>< 谓语谓语 >>

=>the<=>the< 形容词形容词 ><>< 名词名词 ><>< 谓语谓语 >=> the big<>=> the big< 名词名词><>< 谓语谓语 >>

=>the big cat <=>the big cat < 谓语谓语 >=>the big cat <>=>the big cat < 动词动词 ><>< 直直接宾语接宾语 >>

=>the big cat ate<=>the big cat ate< 直接宾语直接宾语 >=>the big cat ate<>=>the big cat ate<冠词冠词 ><>< 名词名词 >=>the big cat ate the <>=>the big cat ate the < 名词名词 > > =>the big cat ate the mouse =>the big cat ate the mouse

Page 4: 第二章  文法和语言 2.1  文法的基本概念

2.1.1 2.1.1 符号和符号串符号和符号串定义 定义 2.12.1

字母表是有穷非空集合。用字母表是有穷非空集合。用 ΣΣ 表示。表示。例:无符号二进制数的字母表为例:无符号二进制数的字母表为 {0{0,, 1}1}

CC 语言的字母表为字母、数字和若干专用符号组成的符号集语言的字母表为字母、数字和若干专用符号组成的符号集定义 定义 2.22.2

符号串是由字母表中的符号组成的有穷序列,又称字符号串是由字母表中的符号组成的有穷序列,又称字符串、串。符串、串。例:例: a,b,c,ba,bbac,caacb,a,b,c,ba,bbac,caacb,······ 等都是字母表等都是字母表 {a,b,c}{a,b,c} 上的符上的符号串号串

Page 5: 第二章  文法和语言 2.1  文法的基本概念

定义 定义 2.32.3

不包含任何字符串的空符号串用不包含任何字符串的空符号串用 εε 表示表示定义 定义 2.42.4

符号串符号串 xx 的长度,即符号串的长度,即符号串 xx 中的字符用中的字符用 |x||x| 表示表示 (( 读读作作 xx 的长度的长度 ))

例:例: |abc|=3 |a|=1 |ε|=0|abc|=3 |a|=1 |ε|=0

定义 定义 2.52.5

设非空符号串设非空符号串 u=xvy,u=xvy, 其中其中 v≠ε,v≠ε, 则称则称 vv 为为 uu 的子串的子串 ,,若若 |u|> |v||u|> |v| 则称则称 vv 为为 uu 的真子串的真子串

Page 6: 第二章  文法和语言 2.1  文法的基本概念

定义 定义 2.62.6

如果如果 z=xyz=xy 是一个符号串,则是一个符号串,则 xx 是是 zz 和头,而和头,而 yy 是是 zz 的尾。的尾。如果如果 xx 是非空的,那么是非空的,那么 yy 是固有尾;同样如果是固有尾;同样如果 yy 非空,那么非空,那么 xx是固有头。是固有头。例:设例:设 z=abcz=abc ,那么,那么 zz 的头是的头是 ε,aε,a,, abab,, abcabc 。除。除 abcabc 外,外,其它都是固有头。其它都是固有头。 zz 的尾是的尾是 ε,cε,c,, bcbc,, abcabc。。 zz 的固有尾是的固有尾是ε,cε,c,, bcbc

Page 7: 第二章  文法和语言 2.1  文法的基本概念

定义 定义 2.72.7

设设 xx 、、 y y 是同一字母表上的两个符号串,把是同一字母表上的两个符号串,把 yy 的符号写的符号写在在 XX 的符号之后得到的符号串,称为的连接。记为的符号之后得到的符号串,称为的连接。记为 xyxy

例:例: x=abx=ab,, y=wabu y=wabu 则则 z=xy=abywabuz=xy=abywabu

显然:显然: |x|+|y|=|z||x|+|y|=|z|

εx=xε=xεx=xε=x

Page 8: 第二章  文法和语言 2.1  文法的基本概念

定义 定义 2.82.8

设设 xx 是符号串,把是符号串,把 xx 自身连接自身连接 nn 次得到符号串次得到符号串 z,z,即即z=xxz=xx······xx(nxx(n个个 x)x) ,称为符号串,称为符号串 xx 的方幂的方幂 ,, 记为记为 z=xz=xnn

例:例: xx00=ε x=ε x11=x x=x x22=xx x=xx x33=xxx =xxx ······

定义 定义 2.92.9

符号串集合若集合符号串集合若集合 AA 中的一切元素都是其字母表上的符号中的一切元素都是其字母表上的符号串,则称串,则称 AA 为该字母表上的符号串集合。为该字母表上的符号串集合。注意:注意: εε 、、 {ε}{ε}和和 ΦΦ (表示空集)的区别(表示空集)的区别

Page 9: 第二章  文法和语言 2.1  文法的基本概念

定义 定义 2.102.10 两个符号串集合两个符号串集合 AA 和和 BB 的乘积的乘积 ABAB 定义为:定义为: AB={xy|x∈AAB={xy|x∈A且且 y∈B}y∈B}例:设例:设 A={a,bc}A={a,bc},, B=B={{ b,c,dab,c,da }则集合}则集合AB={ab,ac,ada,bcb,bcc,bcdaAB={ab,ac,ada,bcb,bcc,bcda }。}。注意:由于注意:由于 εx=xε=x εx=xε=x 因此因此 {ε}A=A{ε}=A {ε}A=A{ε}=A ,但,但ΦA=AΦ=ΦΦA=AΦ=Φ则:则:AA00={ε} ={ε} AA11=A=AAA22=AA=AAAAnn=A=An-1n-1A=AAA=AAn-1n-1(( n>0n>0 ))

Page 10: 第二章  文法和语言 2.1  文法的基本概念

显然:显然:ΣΣ11 是字母表中的所有单个字符组成的字符串是字母表中的所有单个字符组成的字符串ΣΣ22 是所有由字母表中二个的字符组成的字符串是所有由字母表中二个的字符组成的字符串ΣΣ33 是所有由字母表中三个的字符组成的字符串是所有由字母表中三个的字符组成的字符串ΣΣnn 是所有由字母表中长度为是所有由字母表中长度为 nn 的字符串集合的字符串集合定义 定义 2.112.11 AA 的闭包 的闭包 A*=AA*=A00∪A∪A11∪A∪A22∪∪······ AA 的正闭包 的正闭包 AA++= A= A11∪A∪A22∪A∪A33∪∪······ 显然显然 AA++=AA*=A*A A*=A=AA*=A*A A*=A00∪A∪A++

Page 11: 第二章  文法和语言 2.1  文法的基本概念

  由于一个字母表上的正闭包包含了该字母表中的符号所能  由于一个字母表上的正闭包包含了该字母表中的符号所能组成的一切符号串,而语言是该字母表上的某些符号串的集合,组成的一切符号串,而语言是该字母表上的某些符号串的集合,因此,某个字母表上的语言是这个字母表上的正闭包的子集,因此,某个字母表上的语言是这个字母表上的正闭包的子集,而且通常是真子集。而且通常是真子集。例:若例:若 Σ={0,1},Σ={0,1},则则Σ*=Σ*={{ ε,0,1ε,0,1,, 00,0100,01,, 10,11,00010,11,000,, 001001,, 010, 010, ······ }}例:令例:令 L={A,B,C,L={A,B,C,······,Z,a,b, ,Z,a,b, ······,z},D={0,1, ,z},D={0,1, ······9}9}1.L∪D 2.LD 3.L1.L∪D 2.LD 3.L44 4. L(L∪D) 4. L(L∪D)** 5. D 5. D++ 6.D 6.D++∪L∪L** 则分别则分别代表什么集合?代表什么集合?1.1. 字母或数字(包括字母或数字(包括 εε ))的集合的集合2.2. 由字母开头后面跟一个数字的集合由字母开头后面跟一个数字的集合3.3. 由4个字母组成的字符串的集合由4个字母组成的字符串的集合4.4. 由字母开头后面是字母数字(可省略)的集合由字母开头后面是字母数字(可省略)的集合5.5. 数字串集合数字串集合6.6. 数字串和字母串集合(包括数字串和字母串集合(包括 εε ))

Page 12: 第二章  文法和语言 2.1  文法的基本概念

约定:当对符号串约定:当对符号串 z=xyz=xy 的头感兴趣而对其余部分不感兴趣时,的头感兴趣而对其余部分不感兴趣时,可以采用省略写法:可以采用省略写法: z=xz=x······ ;如果只是为了强调;如果只是为了强调 xx 在符号串在符号串 zz中的某处出现,则可表示为中的某处出现,则可表示为 :z=:z=······xx······ ;如果只是为了强调;如果只是为了强调 xx在符号串在符号串 zz 中的末尾出现,则可表示为中的末尾出现,则可表示为 :z=:z=······xx ; ;

Page 13: 第二章  文法和语言 2.1  文法的基本概念

2.1.2 2.1.2 文法和语言的形式定义文法和语言的形式定义  语言是字母表上的某些符号串集合,在这集合中的每个符 语言是字母表上的某些符号串集合,在这集合中的每个符号串都是按一定规则生成的。其规则最常用的是重写规则(又号串都是按一定规则生成的。其规则最常用的是重写规则(又称产生式或生成式),它是形如称产生式或生成式),它是形如 α→βα→β或或 αα :::: =β=β(( αα ,,ββ )的有序对,(读作)的有序对,(读作 αα 定义为定义为 ββ ),其中),其中 αα 称为规则的左部,称为规则的左部,ββ 称为规则的右部。称为规则的右部。

Page 14: 第二章  文法和语言 2.1  文法的基本概念

定义 定义 2.122.12

  文法  文法 GG 定义为四元组(定义为四元组( VVnn,V,Vtt,, PP,, SS )。)。其中其中 ::

VVnn 为非终结符号(或语法实体,或变量)集;为非终结符号(或语法实体,或变量)集; VVtt 为终结符号为终结符号集;集;PP 为产生式(也称规则)的集合;为产生式(也称规则)的集合;SS 称作识别符号或开始符号。它是一个非终结符称作识别符号或开始符号。它是一个非终结符 ,, 至少要在一至少要在一条规则中作为左部出现。条规则中作为左部出现。 VVnn,, VVtt和和 PP 是非空有穷集,是非空有穷集,

显然:显然: VVnn和和 VVtt 不含公共的元素,即不含公共的元素,即 VVnn∩V∩Vtt =Φ =Φ

Page 15: 第二章  文法和语言 2.1  文法的基本概念

定义 定义 2.132.13

    用用 VV 表示表示 VVnn∪V∪Vtt。。 VV 称为文法称为文法 GG 的字汇表。的字汇表。例例 :: 文法文法 G=G=(( VVnn,V,Vtt,, PP,, SS ),其中 ),其中 VVnn={S},V={S},Vtt={0={0,, ll}} ,,

P=P={{ S→OS1S→OS1,, S→01S→01 }。这里,非终结符集中只含一个元素}。这里,非终结符集中只含一个元素S;S; 终结符集由两个元素终结符集由两个元素 00 和和 11 组成;有两条产生式;开始符号是组成;有两条产生式;开始符号是SS 。。

Page 16: 第二章  文法和语言 2.1  文法的基本概念

例例 :: 文法 文法 G=G=(( VVnn,V,Vtt,, PP,, SS ))其中其中 ::VVnn={<={< 整数整数 >,<>,< 正负号正负号 >,<>,< 无符号整数无符号整数 >,<>,< 数字数字 >}>}VVtt={+,-,0,1,2,3,4,5,6,7,8,9}={+,-,0,1,2,3,4,5,6,7,8,9}P={<P={< 整数整数 >→<>→< 正负号正负号 ><>< 无符号整数无符号整数 >> << 整数整数 >→<>→< 无符号整数无符号整数 >> << 正负号正负号 >→+>→+ << 正负号正负号 >→->→- << 无符号整数无符号整数 >→<>→< 无符号整数无符号整数 ><>< 数字数字 >> << 无符号整数无符号整数 >→<>→< 数字数字 >> << 数字数字 >→0>→0 << 数字数字 >→1>→1

Page 17: 第二章  文法和语言 2.1  文法的基本概念

<< 数字数字 >→2>→2 << 数字数字 >→3 >→3 << 数字数字 >→4>→4 << 数字数字 >→5>→5 << 数字数字 >→6>→6 << 数字数字 >→7>→7 << 数字数字 >→8>→8 << 数字数字 >→9>→9 }}S=<S=< 整数整数 >>

Page 18: 第二章  文法和语言 2.1  文法的基本概念

约定:约定: 11 :用尖括号:用尖括号 << 和和 >> 括起的是非终结符,不用尖括号括起来括起的是非终结符,不用尖括号括起来的是终结符号;或者用大写字母表示非终结符号,小写字母表的是终结符号;或者用大写字母表示非终结符号,小写字母表示终结符号示终结符号 22 :可用:可用 G[Z]G[Z] 指出识别符号;如果文法指出识别符号;如果文法 GG 没有明确指出识没有明确指出识别符号,将第一条产生式的左部的非终结符号称为识别符号别符号,将第一条产生式的左部的非终结符号称为识别符号     33 :如果:如果 A→αA→α11,, A→αA→α22,, A→αA→α33 , , A → αA → α44 , , ······A→αA→αkk是所有以是所有以 AA 为左部的产生式(称它们为为左部的产生式(称它们为 AA 的产生式),可以写的产生式),可以写成成 A→αA→α11|α|α22|α|α33|α|α44······|α|αkk,, 称称 αα11,α,α22,α,α33,α,α44······,α,αkk 为为 AA 的选择(或的选择(或候选式) 候选式)

Page 19: 第二章  文法和语言 2.1  文法的基本概念

例例 :<:< 整数整数 >→<>→< 正负号正负号 ><>< 无符号整数无符号整数 >|<>|< 无符号整数无符号整数 >><< 正负号正负号 >→+|->→+|-<< 无符号整数无符号整数 >→<>→< 无符号整数无符号整数 ><>< 数字数字 >|<>|< 数字数字 >><< 数字数字 >→0|1|2|3|4|5|6|7|8|9>→0|1|2|3|4|5|6|7|8|9定义 定义 2.142.14

  设  设 GG 是一文法,如果对于某些符号串是一文法,如果对于某些符号串 αα11,, αα22 能写现出能写现出ββ11=α=α11AαAα22,, ββ22=α=α11γαγα22且且 A →γA →γ是是 GG 中的一条规则,则说符中的一条规则,则说符号串号串 ββ11 直接推导到直接推导到 ββ22 ,或说,,或说, ββ22是是 ββ11 的直接推导的直接推导 (( 一步推一步推导),或说,导),或说, ββ22归约到归约到 ββ11 ,记作,记作 ββ11=>β=>β22

Page 20: 第二章  文法和语言 2.1  文法的基本概念

例例 :: 设有文法设有文法 G[<G[< 整数整数 >]:>]:<< 整数整数 >→<>→< 正负号正负号 ><>< 无符号整数无符号整数 >|<>|< 无符号整数无符号整数 >><< 正负号正负号 >→+|->→+|-<< 无符号整数无符号整数 >→<>→< 无符号整数无符号整数 ><>< 数字数字 >|<>|< 数字数字 >><< 数字数字 >→0|1|2|3|4|5|6|7|8|9>→0|1|2|3|4|5|6|7|8|9试推导出试推导出 20062006<< 整数整数 >=><>=>< 无符号整数无符号整数 >=><>=>< 无符号整数无符号整数 ><>< 数字数字 >=>>=><< 无符号整数无符号整数 ><>< 数字数字 ><>< 数字数字 >=><>=>< 无符号整数无符号整数 ><>< 数字数字

><>< 数字数字 ><>< 数字数字 >=><>=>< 数字数字 ><>< 数字数字 ><>< 数字数字 ><>< 数字数字>=>2<>=>2< 数字数字 ><>< 数字数字 ><>< 数字数字 >=>20<>=>20< 数字数字 ><>< 数字数字>=>200<>=>200< 数字数字 >=>2006>=>2006

Page 21: 第二章  文法和语言 2.1  文法的基本概念

定义 定义 2.152.15

如果存在直接推导的序列如果存在直接推导的序列 αα11=>α=>α22=>α=>α33=>α=>α44······=>α=>αnn , , 则则称称 αα 这个系列是从这个系列是从 αα11至至 ααnn 的一个推导,若存在一个从的一个推导,若存在一个从 αα11

至至 ααnn 的一个推导,则称的一个推导,则称 αα11 可推导(长度推导,可推导(长度推导, ++ 推导)推导)到到 ααnn 或者说,或者说, ααnn 可归约到可归约到 αα11 ,记作,记作 αα11==++=>α=>αnn

例:例: << 整数整数 >=>=++=>2006=>2006

定义 定义 2.16 2.16 如果对于符号串如果对于符号串 αα 和和 ββ有有 α=α=++=>β=>β或或 α=βα=β 则记则记作作 α=α=**=>β=>β ,称,称 αα 广义推导( 广义推导( **推导)出推导)出 β β

例例 : : 对文法对文法 G[<G[< 整数整数 >]>]有有 << 整数整数 >=>=**=>2006=>2006

例:文法例:文法 G[<G[< 整数整数 >]>]有有 << 整数整数 >=>=**=><=>< 整数整数 >>

例:例: << 句子句子 >=>=**=>the big cat ate the mouse=>the big cat ate the mouse

Page 22: 第二章  文法和语言 2.1  文法的基本概念

定义 定义 2.172.17 设设 G[S]G[S] 是一文法,如果符号串是一文法,如果符号串 αα 是从识别符号推导出来的,是从识别符号推导出来的,即有即有 S=S=**=>α=>α,, α∈α∈(( VVtt∪V∪Vnn )) ** ,则称,则称 αα 是文法是文法 G[S]G[S] 的句的句型。若型。若 αα 仅由终结符号组成,即仅由终结符号组成,即 α∈Vα∈Vtt

** ,则称,则称 αα 为为 G[S]G[S] 的句的句子。子。例例 : : 设有文法设有文法 G[<G[< 整数整数 >]:>]:<< 整数整数 >→<>→< 数字串数字串 >><< 数字串数字串 >→<>→< 数字串数字串 ><>< 数字数字 >|<>|< 数字数字 >><< 数字数字 >→0|1|2|3|4|5|6|7|8|9>→0|1|2|3|4|5|6|7|8|9显然显然 00000000、、 20062006、、 123456789123456789、、 << 数字串数字串 ><>< 数字数字><>< 数字数字 >> 都是都是 G[<G[< 整数整数 >]>] 文法的句型 ,其中文法的句型 ,其中00000000、、 20062006、、 123456789123456789是是 GG 的句子的句子而而 3<3< 数字串数字串 >> 、 、 << 数字数字 ><>< 整数整数 >> 不是句型不是句型

Page 23: 第二章  文法和语言 2.1  文法的基本概念

定义 定义 2.182.18 文法文法 GG 所产生的语言定义为:所产生的语言定义为: LL(( GG )) ={α|S=={α|S=**=>α=>α且且 α∈Vα∈Vtt

**}} 。。例:例: LL(( G[<G[< 整数整数 >]>])) ={={ 一切包括前导零的无符号整数一切包括前导零的无符号整数 }}

定义 定义 2.192.19

若若 LL(( GG11)) = L= L(( GG22 ),则称),则称 GG11,, GG22 是等价的是等价的例:设 例:设 GG11[<[< 整数整数 >]>] ):):<< 整数整数 >→<>→< 数字串数字串 >><< 数字串数字串 >→<>→< 数字串数字串 ><>< 数字数字 >|<>|< 数字数字 >><< 数字数字 >→0|1|2|3|4|5|6|7|8|9>→0|1|2|3|4|5|6|7|8|9

设设 GG22[<[< 整数整数 >]>] ):):<< 整数整数 >→<>→< 数字串数字串 >><< 数字串数字串 >→ <>→ < 数字串数字串 > 0| <> 0| < 数字串数字串 > 1| <> 1| < 数字串数字串 > 2| <> 2| <数字串数字串 > 3| <> 3| < 数字串数字串 > 4| <> 4| < 数字串数字串 > 5| <> 5| < 数字串数字串 > 6| <> 6| < 数数字串字串 > 7| <> 7| < 数字串数字串 > 8| <> 8| < 数字串数字串 > 9 |0|1|2|3|4|5|6|7|8|9> 9 |0|1|2|3|4|5|6|7|8|9

则则 LL ( ( GG11)) = L= L ( ( GG22 ))

Page 24: 第二章  文法和语言 2.1  文法的基本概念

由此可以看出,文法描述的语言是该文法一切句子的集合。由此可以看出,文法描述的语言是该文法一切句子的集合。  从上还可以看出,一个语言是在某特定字母表上按一定的  从上还可以看出,一个语言是在某特定字母表上按一定的规则构成的符号串集合。显然不符合规则的符号串不能称为语规则构成的符号串集合。显然不符合规则的符号串不能称为语言。言。构成语言的三个要点:构成语言的三个要点:11 .字母表 也即字符集,它规定了语言中所允许的字符或基.字母表 也即字符集,它规定了语言中所允许的字符或基本符号本符号22 .目标 这是一个语言最终要达到或处理的目标.目标 这是一个语言最终要达到或处理的目标33 .规则 规则指如何从字母表中的字符或基本符号构成目标 .规则 规则指如何从字母表中的字符或基本符号构成目标

Page 25: 第二章  文法和语言 2.1  文法的基本概念

文法提供了三个要点。文法提供了三个要点。11 .在语言的设计和编译器的编写方面,文法都提供了极大的.在语言的设计和编译器的编写方面,文法都提供了极大的优点:优点:22 .文法给出了精确的,也于理解的语言语法说明.文法给出了精确的,也于理解的语言语法说明设计得漂亮的文法,把结构加于程序设计语言,这些结构对把设计得漂亮的文法,把结构加于程序设计语言,这些结构对把源程序翻译成真正的目标代码和错误诊断都是有用的。源程序翻译成真正的目标代码和错误诊断都是有用的。33 .语言也是逐步完善的,需要补充新的结构和完成附加任务。.语言也是逐步完善的,需要补充新的结构和完成附加任务。如果存在以语法为基础的语言的实现,这些新结构的加入就更如果存在以语法为基础的语言的实现,这些新结构的加入就更方便了。方便了。

Page 26: 第二章  文法和语言 2.1  文法的基本概念

语言的特征:语言的特征:11 .一种语言需借助于另一种语言来描述.一种语言需借助于另一种语言来描述22 .语法是以有穷的方式来描述潜在无穷句子集合的手段.语法是以有穷的方式来描述潜在无穷句子集合的手段33 .语法上的正确不能保证语义上的正确.语法上的正确不能保证语义上的正确

Page 27: 第二章  文法和语言 2.1  文法的基本概念

2.1.2.1. 3 推导与递归3 推导与递归定义 定义 2.202.20  如果每次推导最左非终结符称最左推导,记为  如果每次推导最左非终结符称最左推导,记为 α=α=ll=>β=>β定义 定义 2.212.21  如果每次推导最右非终结符称最右推导,最右推导又称为  如果每次推导最右非终结符称最右推导,最右推导又称为规范推导,记为规范推导,记为 α=α=rr=>β=>β ,由最右推导得出的句型称为右句,由最右推导得出的句型称为右句型又称规范句型型又称规范句型

Page 28: 第二章  文法和语言 2.1  文法的基本概念

递归规则与递归文法递归规则与递归文法  由于语言通常是无穷的而文法是有限的,用有限的文法定  由于语言通常是无穷的而文法是有限的,用有限的文法定义无穷的语就必须使用递归定义。义无穷的语就必须使用递归定义。递归规则递归规则  若文法中存在规则  若文法中存在规则 A→A→ααAAββ  这种左部和右部具有相同的非终结符号的规则称为直接递  这种左部和右部具有相同的非终结符号的规则称为直接递归规则或称递归规则。这种递归称为规则递归。归规则或称递归规则。这种递归称为规则递归。若若 A→AA→Aαα ,即为左递归规则;,即为左递归规则;若若 A→A→ααAA ,即为右递归规则;,即为右递归规则;若若 A→A→ααAAββ((αα 、、 ββ≠ε≠ε ),即为自嵌套规则。),即为自嵌套规则。

Page 29: 第二章  文法和语言 2.1  文法的基本概念

递归文法递归文法 有时文法中不含有直接的递归规则,但通过若干推导仍能得有时文法中不含有直接的递归规则,但通过若干推导仍能得到递归,这种递归称为间接递归或文法递归,含有递归的文法到递归,这种递归称为间接递归或文法递归,含有递归的文法被称为递归文法。被称为递归文法。如: 如: A→BA→Bαα

B→AB→Aββ

则则 A=>BA=>Bα=> α=> AAβαβα

Page 30: 第二章  文法和语言 2.1  文法的基本概念

2.1.4 2.1.4 文法的分类文法的分类 形式语言自形式语言自 19561956年乔姆斯基(年乔姆斯基( ChomskyChomsky )进行描述以)进行描述以来,得到了很大的发展。乔姆斯基从理论上讨论了语言和文法,来,得到了很大的发展。乔姆斯基从理论上讨论了语言和文法,按照文法规则的不同定义形式进行分类,并且为每一语言构造按照文法规则的不同定义形式进行分类,并且为每一语言构造象自动机一样的识别器。形式语言的理论形成和发展对计算机象自动机一样的识别器。形式语言的理论形成和发展对计算机科学有着深刻的影响,特别是对程序设计语言的设计技术、编科学有着深刻的影响,特别是对程序设计语言的设计技术、编译实现都有重大影响。译实现都有重大影响。乔姆斯基把文法分成四种类型,即乔姆斯基把文法分成四种类型,即 00 型、型、 11 型、型、 22 型和型和 33 型文型文法。法。 设设 G=G=(( VVnn,V,Vtt,, PP,, SS )如果它的每个产生式)如果它的每个产生式 α→βα→β 是这样是这样一种结构:一种结构: α∈α∈(( VVnn∪V∪Vtt )) ** 且至少含有一个非终结符,而且至少含有一个非终结符,而β∈β∈(( VVnn∪V∪Vtt V V )) ** ,则 ,则 GG 是个 是个 00 型文法。型文法。 00 型文法也称短语文法。一个非常重要的理论结果是,型文法也称短语文法。一个非常重要的理论结果是, 00 型型文法的能力相当于图灵机文法的能力相当于图灵机(( TuringTuring )。或者说;任何)。或者说;任何 00 型语言都是递归可枚举的;反之,型语言都是递归可枚举的;反之,递旧可枚举集必定是一个递旧可枚举集必定是一个 00 型语言。型语言。

  

Page 31: 第二章  文法和语言 2.1  文法的基本概念

设设 G=G=(( VVnn,V,Vtt,, PP,, SS )为一文法,若)为一文法,若 PP 中的每一个产中的每一个产生式生式 α→βα→β除除 S→εS→ε 外均满足外均满足 |β|≥|α||β|≥|α| ,则文法,则文法 GG 是是 11 型或上型或上下文有关文法。下文有关文法。 可以证明满足可以证明满足 |β|≥|α||β|≥|α| 的文法都存在规则均形如的文法都存在规则均形如 αAβ→αγβαAβ→αγβ的等价的文法,的等价的文法, αα 、、 ββ 不都空,意为非终结符不都空,意为非终结符 AA 在在 αα 、、 ββ 这这样的上下文条件下,允许替换为样的上下文条件下,允许替换为 γγ

设设 G= G= (( VVnn,V,Vtt,, PP,, SS ) ,若) ,若 PP 中的每一个产生式中的每一个产生式α→βα→β 满足:满足: αα 是一非终结符,即:是一非终结符,即: α∈Vnα∈Vn,, β∈β∈(( VVnn∪V∪Vtt ))** 则此文法称为则此文法称为 22 型的或上下文无关文法。型的或上下文无关文法。 设设 G= G= (( VVnn,V,Vtt,, PP,, SS ) ,若) ,若 PP 中的每一个产生式的形中的每一个产生式的形式都是式都是 A→aBA→aB或或 A→aA→a ,其中,其中 AA 和和 BB 都是非终结符.都是非终结符. aa 是终结是终结符,则符,则 GG 是是 33 型文法或正规文法。三型文法又分左线性和右线型文法或正规文法。三型文法又分左线性和右线性的。如每一个产生式的形式都是性的。如每一个产生式的形式都是 A→aBA→aB或或 A→a A→a 称为右线性称为右线性的;如每一个产生式的形式都是的;如每一个产生式的形式都是 A→BaA→Ba或或 A→a A→a 称为左线性的。称为左线性的。00 型文法、型文法、 11 型文法、型文法、 22 型文法、型文法、 33 型文法对应的自动机分别型文法对应的自动机分别为图灵机、线性界限自动机、下推自动机、有限自动机为图灵机、线性界限自动机、下推自动机、有限自动机

Page 32: 第二章  文法和语言 2.1  文法的基本概念

显然,显然, 33 型文法即型文法即 22 型文法、型文法、 11 型文法、型文法、 00 型文法型文法 22 型文法即型文法即 11 型文法、型文法、 00 型文法型文法 11 型文法即型文法即 00 型文法型文法例例 11 :写出语言:写出语言 L={aL={aiibbjjcckk|i,j,k≥1}|i,j,k≥1} 的文法的文法 S→aS|aB B→bB|bC C→cC|cS→aS|aB B→bB|bC C→cC|c例例 22 :写出语言:写出语言 L={aL={aiibbiicckk|i,k≥1}|i,k≥1} 的文法的文法 S→AC A→aAb|ab C→cC|cS→AC A→aAb|ab C→cC|c例例 33 :写出语言:写出语言 L={aL={aiibbiiccii|i≥1}|i≥1} 的文法的文法 S→aSBC|aBCS→aSBC|aBC CB→BC aB→ab bB→bb bC→bc cC→ccCB→BC aB→ab bB→bb bC→bc cC→cc注意:注意:虽然虽然 33 型文法是型文法是 00 型文法的特例型文法的特例 ,, 但但 00 型文法描述的语言不一型文法描述的语言不一定比定比 33 型文法描述的语言丰富型文法描述的语言丰富

Page 33: 第二章  文法和语言 2.1  文法的基本概念

2.2 2.2 句型分析句型分析 所谓句型分析是指给定一个字符串判定是否是文法上定义所谓句型分析是指给定一个字符串判定是否是文法上定义的句子。在日常生活中语言(无论中文、英文)都是上下文有的句子。在日常生活中语言(无论中文、英文)都是上下文有关。实际上程序设计语言也是上下文有关的。如:关。实际上程序设计语言也是上下文有关的。如: GOTO <GOTO <标号标号 > →GOTO> →GOTO 无符号整数无符号整数 ;; 标识符的前说明后使用问题,但标识符的前说明后使用问题,但程序设计语言中的大部分规则是可以写成上下文无关文法,上程序设计语言中的大部分规则是可以写成上下文无关文法,上下文无关文法有足够的能力描述现今程序设计语言的语法结构,下文无关文法有足够的能力描述现今程序设计语言的语法结构,比如描述算术表达式,描述各种语句等等。比如描述算术表达式,描述各种语句等等。 由于上下文无关文法不必考虑这所处的上下文,计算机实由于上下文无关文法不必考虑这所处的上下文,计算机实现比较方便,因而在程序设计语言的识别中较多地采用下文无现比较方便,因而在程序设计语言的识别中较多地采用下文无关文法,今后如不特别指出的文法均为上下文无关的文法。 关文法,今后如不特别指出的文法均为上下文无关的文法。

Page 34: 第二章  文法和语言 2.1  文法的基本概念

2.2.1 2.2.1 语法树语法树 如果把推导的过程用一种直观的图形表示就形成了一棵树,如果把推导的过程用一种直观的图形表示就形成了一棵树,即语法树.也称推导树或分析树。即语法树.也称推导树或分析树。例:设例:设 G[S]G[S] ::S→AB A→aAb|ab B→cBd|cdS→AB A→aAb|ab B→cBd|cd

关于句子的推导为:关于句子的推导为:s=>AB=>AcBd=>Accdd=>abccdds=>AB=>AcBd=>Accdd=>abccdd

其构造语法树如下其构造语法树如下: :

Page 35: 第二章  文法和语言 2.1  文法的基本概念

注意树中的概念和文法的关系:注意树中的概念和文法的关系:11 .结点 表示一个文法符号.结点 表示一个文法符号22 .根 表示识别符号.根 表示识别符号33 .边 表示存在一个推导.边 表示存在一个推导44 .分支 表示存在这样一条产生式.分支 表示存在这样一条产生式55 .子树 表示若干推导.子树 表示若干推导66 .末端结点 表示相应的句型 .末端结点 表示相应的句型

Page 36: 第二章  文法和语言 2.1  文法的基本概念

定义 定义 2.22 2.22

如果对于某文法的同一句子存在不同的语法树,则称句如果对于某文法的同一句子存在不同的语法树,则称句子的二义性的。包含二义性句了的文法称为二义性文法,否同子的二义性的。包含二义性句了的文法称为二义性文法,否同称该文法为无二义性的称该文法为无二义性的定义 定义 2.232.23

如果对于某语言不存在无二义性文法,则称该语言是二如果对于某语言不存在无二义性文法,则称该语言是二义性的义性的注意:目前人们已经证明,二义性部题是不可判定的。即,不注意:目前人们已经证明,二义性部题是不可判定的。即,不存在一个算法,它能在有限步骤内,确切判定任给的一个文法存在一个算法,它能在有限步骤内,确切判定任给的一个文法是否为二义是否为二义的的. .

Page 37: 第二章  文法和语言 2.1  文法的基本概念

例:设有文法例:设有文法 G[E]G[E] :: E→E+E|E*E|E→E+E|E*E|(( EE )) |i|i

证明该文法是二义性的证明该文法是二义性的由于对于句子由于对于句子 i*i+ii*i+i 有有

可见,文法可见,文法 G[E]G[E] 的句子的句子 i*i+ii*i+i 有两种不同的语法树,故该文有两种不同的语法树,故该文法是二义性的法是二义性的

Page 38: 第二章  文法和语言 2.1  文法的基本概念

注意:文法的二义性和语言的二义性是两个不同的概念。注意:文法的二义性和语言的二义性是两个不同的概念。 因为 对于同一语言可能有两个不同的文法因为 对于同一语言可能有两个不同的文法 GG11和和 GG22 ,一,一个是二义性的,但另一个却不是二义性的。个是二义性的,但另一个却不是二义性的。例: 例: GG11[E]:[E]:

E→E+E|E*E|(E)|iE→E+E|E*E|(E)|i

GG22[E]:[E]:

E→E+T|TE→E+T|T

T→T*F|FT→T*F|F

F→(E)|iF→(E)|i

对于非二义性文法来说,最左(最右)推导是唯一的。 对于非二义性文法来说,最左(最右)推导是唯一的。

Page 39: 第二章  文法和语言 2.1  文法的基本概念

消除二义性消除二义性如果语言不是二义性的,那么就存在一组非二义性文法规则,如果语言不是二义性的,那么就存在一组非二义性文法规则,定义该语言,换句话说,有些文法是不能通过改造文法消支其定义该语言,换句话说,有些文法是不能通过改造文法消支其二义性的,也有些文法的二义性是可以通过重写文法而消除二二义性的,也有些文法的二义性是可以通过重写文法而消除二义性。义性。例:例: S→if E then S|if E then S else S|bS→if E then S|if E then S else S|b对于句型对于句型 if E then E then S else Sif E then E then S else S存在二棵不同的语法树,故该文法是二义性的。存在二棵不同的语法树,故该文法是二义性的。在实际应用中靠近的在实际应用中靠近的 thenthen 和 和 elseelse先行匹配,为了识别方便先行匹配,为了识别方便可以消去二义性把该文法改写成:可以消去二义性把该文法改写成:S→S1|S2S→S1|S2S1→if E then S1 else S1|bS1→if E then S1 else S1|bS2→if E then S1|if E then S1 else S2 S2→if E then S1|if E then S1 else S2

Page 40: 第二章  文法和语言 2.1  文法的基本概念

2.2.2 2.2.2 文法的约定文法的约定 文法虽然规定的语言的形成方法文法虽然规定的语言的形成方法 ,, 但文法中有的规则会对但文法中有的规则会对分析带来麻烦分析带来麻烦 ,, 有会带来灾难,为此需对文法中的规则加以限有会带来灾难,为此需对文法中的规则加以限制。制。有害规则有害规则定义 定义 2.232.23 文法文法 GG 中形如中形如 U→UU→U 的规则,称为有害规则。的规则,称为有害规则。 这种规则没有增加句子的集合,给文法增加了二义性,给这种规则没有增加句子的集合,给文法增加了二义性,给今后的分析带来不必要的麻烦,删除这样的规则没有形响到文今后的分析带来不必要的麻烦,删除这样的规则没有形响到文法定义的语言。法定义的语言。

Page 41: 第二章  文法和语言 2.1  文法的基本概念

例:设例:设 G[S]G[S] : : S→S|DS|DS→S|DS|D D→0|1D→0|1 删除有害规则删除有害规则 S→SS→S 后的新文法后的新文法 G'[S]G'[S] :: S→DS|DS→DS|D D→0|1D→0|1显然有显然有 L(G[S])=L(G'[S])L(G[S])=L(G'[S]) ,,

Page 42: 第二章  文法和语言 2.1  文法的基本概念

定义定义 2.242.24文法文法 GG 中某一规则,其左部的非终结符为中某一规则,其左部的非终结符为 UU ,若满足下列条,若满足下列条件之一,则称该规则为多余规则。件之一,则称该规则为多余规则。(( 11 )不能从识别符号推导出使用)不能从识别符号推导出使用 UU 的句型的句型 ,, 即从除开始符号即从除开始符号外不出现在该文法的任何其它的规则的右部外不出现在该文法的任何其它的规则的右部 ,, 。。(( 22 )若在推导中使用该规则,则不能推出终结符号串。 )若在推导中使用该规则,则不能推出终结符号串。

Page 43: 第二章  文法和语言 2.1  文法的基本概念

例:设例:设 G[S]G[S] :: (1) S →Be(1) S →Be

(2) B →Ce(2) B →Ce

(3) B →Af(3) B →Af

(4) A →Ae(4) A →Ae

(5) A →e(5) A →e

(6) C →Cf(6) C →Cf

(7) D →f(7) D →f

由于非终结符由于非终结符 DD 不在规则右部出现,非终结符不在规则右部出现,非终结符 CC 不能推导成不能推导成终结符号串,故都是多余规则,应删除。(终结符号串,故都是多余规则,应删除。( 66 )、()、( 77 )删除)删除后(后( 22 )也不能推导成终结符号串也删除。)也不能推导成终结符号串也删除。

Page 44: 第二章  文法和语言 2.1  文法的基本概念

故故 GG‘‘[S][S] :: (1) S →Be(1) S →Be (2) B →Af(2) B →Af (3) A →Ae(3) A →Ae (4) A →e(4) A →e当一个上下文无关的文法中不含有害规则和多余规则时,称当一个上下文无关的文法中不含有害规则和多余规则时,称这个文法是压缩了的文法,在以后各章中介绍的文法不特指这个文法是压缩了的文法,在以后各章中介绍的文法不特指都是压缩了的文法。都是压缩了的文法。

Page 45: 第二章  文法和语言 2.1  文法的基本概念

2.2.2 2.2.2 句型的分析方法句型的分析方法 对于一个上下文无关文法,语法树就是该文法上的句型的对于一个上下文无关文法,语法树就是该文法上的句型的推导过程的几何表示。语法树能将所给句型的结构很直观地显推导过程的几何表示。语法树能将所给句型的结构很直观地显示出来了。利用语法树可直接对句型进行分析。这里所说的句示出来了。利用语法树可直接对句型进行分析。这里所说的句型分析问题,就是对所给定的符号串分析是否是文法定义的句型分析问题,就是对所给定的符号串分析是否是文法定义的句型。句型的分析也就是否能构造出推导过程。进一步说,当给型。句型的分析也就是否能构造出推导过程。进一步说,当给定一个符号串时,试图按照某文法的规则为该符号串构造推导定一个符号串时,试图按照某文法的规则为该符号串构造推导或语法树,以此识别出它是该文法的一个句型;当符号串全部或语法树,以此识别出它是该文法的一个句型;当符号串全部由终结符号组成时,就是识别输入符号串是否是某文法的一个由终结符号组成时,就是识别输入符号串是否是某文法的一个句子。句子。

Page 46: 第二章  文法和语言 2.1  文法的基本概念

对于程序设汁语言来说,要识别输入符号串是否是程序设对于程序设汁语言来说,要识别输入符号串是否是程序设计语言的程序。程序是定义实际上就是程序设计语言的文法的计语言的程序。程序是定义实际上就是程序设计语言的文法的一个句子。句型分析是一个识别输入符号串是否为语法上正确一个句子。句型分析是一个识别输入符号串是否为语法上正确的程序的过程、在语言的编译实现中,把完成句型分析的程序的程序的过程、在语言的编译实现中,把完成句型分析的程序称为分析程序或识别程序,分析算法又称识别算法。称为分析程序或识别程序,分析算法又称识别算法。

由于输入符号串是从左到右的,所以我们介绍的分析算法由于输入符号串是从左到右的,所以我们介绍的分析算法都称为从左到右的分析算法。 这种分析算法又可分成两大类:都称为从左到右的分析算法。 这种分析算法又可分成两大类:即自顶向下的和自底向上的分析方法。即自顶向下的和自底向上的分析方法。

Page 47: 第二章  文法和语言 2.1  文法的基本概念

自顶向下的分析方法自顶向下的分析方法 自顶向下的分析方法也称为自上而下的分析方法自顶向下的分析方法也称为自上而下的分析方法 ,, 它是从它是从文法的开始符号出发,反复使用各种产生式,寻找文法的开始符号出发,反复使用各种产生式,寻找““匹配匹配””于于输入符号串的推导至输入符号串。输入符号串的推导至输入符号串。例:例: G[S]G[S] :: S→cAdS→cAd

A→abA→ab

A→aA→a

识别输入串识别输入串 w=cabdw=cabd 是否该文法的句子。是否该文法的句子。

Page 48: 第二章  文法和语言 2.1  文法的基本概念

自底向上的分析方法自底向上的分析方法自底向上的分析方法又称自下而上的方法,它是从输入符号用自底向上的分析方法又称自下而上的方法,它是从输入符号用开始,逐步进行开始,逐步进行““归约归约””,直至归约到文法的开始符号。,直至归约到文法的开始符号。例例 :: 设有文法设有文法G[S]G[S] :: S→cAdS→cAd

A→abA→ab

A→aA→a

识别输入串识别输入串 w=cabdw=cabd 是否该文法的句子。是否该文法的句子。

Page 49: 第二章  文法和语言 2.1  文法的基本概念

句型分析的有关问题句型分析的有关问题 在自顶向下的分析方法中,需解决的问题是形如在自顶向下的分析方法中,需解决的问题是形如 A→αA→α11|α|α22||αα33|α|α44······|α|αkk 的规则究竟选择那一个候选式。的规则究竟选择那一个候选式。 在自底向上的分析方法中,需解决的问题是如在文法中存在在自底向上的分析方法中,需解决的问题是如在文法中存在形如形如 A→αA→α和和 B→αB→α 的规则,并在分析过程中发现形如的规则,并在分析过程中发现形如 αα 的符的符号串是把它替换成号串是把它替换成 AA 还是还是 BB ??例例 :: 设设 G[S]:G[S]: S→aBCS→aBC B→ib|bB→ib|b C→DE|FGC→DE|FG D→dD→d E→ehE→eh F→deF→de G→tG→t当分析句子当分析句子 abdetabdet时时 ,, 对于对于 CC 规则很难确定先用规则很难确定先用 DEDE还是还是 FGFG

Page 50: 第二章  文法和语言 2.1  文法的基本概念

例:例: G[S]:S→aAcBeG[S]:S→aAcBe A→bA→b A→AbA→Ab B→bB→b识别输入符号串识别输入符号串 abbbcbeabbbcbe栈 输入符号串栈 输入符号串a bbcbea bbcbeab bcbeab bcbeaA bcbeaA bcbeaAb cbeaAb cbeaA cbeaA cbeaAc beaAc beaAcb eaAcb eaAcB eaAcB eaAcBeaAcBeSS

Page 51: 第二章  文法和语言 2.1  文法的基本概念

定义 定义 2.252.25 设设 G[S]G[S] 是一个文法,是一个文法, αβδαβδ 是文法是文法 GG 的一个句型,如果的一个句型,如果有有 S=*=>αAδS=*=>αAδ且且 A=A=++=>β=>β 则称则称 ββ 是句型是句型 αβδαβδ相对于非终相对于非终结符结符 AA 的短语、特别是,如果有的短语、特别是,如果有 A→βA→β 则称则称 ββ 是句型是句型 αβδαβδ相对相对于规则 于规则 A→βA→β 的直接短语(简单短语)的直接短语(简单短语) 上述定义的意思为某一句型中的子符号串归约后的符号串上述定义的意思为某一句型中的子符号串归约后的符号串仍为句型仍为句型即即 S=*=>αAδ=S=*=>αAδ=++=>αβδ=>αβδ定义 定义 2.262.26 一个句型的最左直接短语称为该句型的句柄。一个句型的最左直接短语称为该句型的句柄。

Page 52: 第二章  文法和语言 2.1  文法的基本概念

例:写出例:写出 G[<G[< 整数整数 >]:>]: << 整数整数 >→<>→< 数字串数字串 >> << 数字串数字串 >→<>→< 数字串数字串 ><>< 数字数字 >|<>|< 数字数字 >> << 数字数字 >→0|1|2|3|4|5|6|7|8|9>→0|1|2|3|4|5|6|7|8|9中的句型中的句型 << 数字串数字串 > <> < 数字数字 >3>3 的短语、简单短语和句柄的短语、简单短语和句柄短语: 短语: 3 <3 < 数字串数字串 > <> < 数字数字 > <> < 数字串数字串 > <> < 数字数字 > 3> 3简单短语: 简单短语: << 数字串数字串 > <> < 数字数字 > 3> 3句柄 句柄 << 数字串数字串 > <> < 数字数字 > > 而而 << 数字串数字串 >> 、 、 << 数字数字 > 3> 3 不是短语不是短语

Page 53: 第二章  文法和语言 2.1  文法的基本概念

每次归约句柄的归约方式,称为规范归约,归范归约又每次归约句柄的归约方式,称为规范归约,归范归约又称最左归约,它是最右推导的逆过程(其分析过程中均为右句称最左归约,它是最右推导的逆过程(其分析过程中均为右句型)。型)。 在规范归约中,由于每次归约的是句柄,所在句柄后面不在规范归约中,由于每次归约的是句柄,所在句柄后面不会出现非终结符号,基于这一点,在采用的所谓移入归约法中,会出现非终结符号,基于这一点,在采用的所谓移入归约法中,在移入归约过程中,一旦发现句柄即可用规则的左部替换,这在移入归约过程中,一旦发现句柄即可用规则的左部替换,这种方法犹如种方法犹如““剪句柄剪句柄””。归约过程实质上也是语法树的构造过。归约过程实质上也是语法树的构造过程。程。

Page 54: 第二章  文法和语言 2.1  文法的基本概念

下面介绍语法树的特性:下面介绍语法树的特性:(( 11 )对于每棵语法树至少存在一个推导)对于每棵语法树至少存在一个推导(( 22 )对于每个推导,都有一个相应的语法树,但不同的推导)对于每个推导,都有一个相应的语法树,但不同的推导可能有相同的语法树可能有相同的语法树(( 33 )树的每一分支表示一个直接推导,在此推导中,可用这)树的每一分支表示一个直接推导,在此推导中,可用这一分支的结点取代这一分支的名字,这样在文法中存在这样的一分支的结点取代这一分支的名字,这样在文法中存在这样的规则,其左部是分支的名字 ,而其右部是分支结点的符号规则,其左部是分支的名字 ,而其右部是分支结点的符号(( 44 )树的末端结点形成所要推导的句型。)树的末端结点形成所要推导的句型。(( 55 )设)设 AA 是句型是句型 αβδαβδ 的某一子树的根,其中的某一子树的根,其中 ββ 是形成子树是形成子树的末端结点的符号串,因此,的末端结点的符号串,因此, ββ 是句型是句型 αβδαβδ相对于相对于 AA 的短语,的短语,如果子树是单个分支时,那么就是简单短语如果子树是单个分支时,那么就是简单短语

Page 55: 第二章  文法和语言 2.1  文法的基本概念

定理定理 若若 LL 是由文法是由文法 G=G=(( VVnn,V,Vtt,, PP,, SS )产生的语言,)产生的语言, PP 中的中的每一个产生式的形式均为每一个产生式的形式均为 A→αA→α ,其中,其中 A∈VnA∈Vn,, α∈α∈(( VVnn∪V∪Vtt ))**(( αα 即可能为即可能为 εε ),则),则 LL 能由这样的一种文法产生,即每一个能由这样的一种文法产生,即每一个产生式或者为产生式或者为 A→βA→β 形式,其中形式,其中 AA 为一非终结符,即为一非终结符,即A∈VnA∈Vn,, α∈α∈(( VVnn∪V∪Vtt)) ++ ,,或者为,,或者为 S→εS→ε 形式,且形式,且 SS 不出现不出现在任何产生式的右边。在任何产生式的右边。定理定理 如果如果 G=G=(( VVnn,V,Vtt,, PP,, SS )是一个上下文有关文法,则存在)是一个上下文有关文法,则存在另一个上下文有关文法另一个上下文有关文法 GG11 ,它所产生的语言与,它所产生的语言与 GG 产生的相同,产生的相同,其中其中 GG11 的开始符号不出现在的开始符号不出现在 GG11 的任何产生式的右边。又如果的任何产生式的右边。又如果 GG是一个上下文无关文法,也能找到这样一个上下文无关文法是一个上下文无关文法,也能找到这样一个上下文无关文法 GG11 ,,如果如果 GG 是一个正规文法,则也能找到这样一个正规文法是一个正规文法,则也能找到这样一个正规文法 GG11 。 。

Page 56: 第二章  文法和语言 2.1  文法的基本概念

例:例: G[E]:E→E+T|TG[E]:E→E+T|T T→T*F|FT→T*F|F F→(E)|iF→(E)|i试求出句子试求出句子 i+i*i+ii+i*i+i 的短语、的短语、简单短语和句柄简单短语和句柄

故短语为: i+i*i+i i+i*i i i*i i i i

简单短语为 i i i i

句柄为 i