离散数学 09.01 语言和语法

 

§9.1 

  英语的单词可以用很多方法排列起来,英语的语法告诉我们是否一个单词的排列是一个有效的句子。例如,the frog writes neatly 是一个有效的句子,因为它是由一个名词组 the frog (由定冠词 the 和 名词 frog 组成),后跟一个动词词组 writes neatly (由动词 writes 和副词neatly组成)。我们不在意这个句子没有实际意义,因为我们只关心句法或者说句子的形式,而不是它的语义或者说含义。我们也注意到下面单词的排列 swims quickly mathematics 是无效的句子,因为它不符合英语的语法。
  自然语言的句法是非常复杂的,事实上,不太可能把它的所有句法规则写出来,再把一个语言自动转换成另一个语言的研究中使用了形式语言的概念,它不像自然语言,它被一个封闭的句法规则集所确定。句法规则不但在自然语言的研究中重要,在程序语言中也很重要。我们将描述使用一个语法的形式语言的句子。在程序语言的应用中经常遇到两类问题:(1)怎么决定一个单词的排列是否是一个形式语言中的有效句子?(2)如何产生一个形式语言中的有效的句子?语法的使用可以帮助我们解决这些问题。
  在给出语法的定义之前,我们先来看一个产生英语语言的子集的语法的例子。这个英语语言的子集用一个规则来产生一个有效的句子,规则如下:
  1.一个句子由一个名词词组后跟一个动词词组组成;
  2.一个名词词组由一个定冠词后跟一个形容词再后跟一个名词组成,或者
  3.一个名词词组由一个定冠词后跟一个名词组成;
  4.一个动词词组由一个动词后跟一个副词,或者
  5.一个动词词组由一个动词组成;
  6.一个定冠词是a,或者
  7.一个定冠词是the;
  8.一个形容词是large或者
  9.一个形容词是hungry;
  10.一个名词是rabbit,或者
  11.一个名词是mathematician;
  12.一个动词是eats,或者
  13.一个动词是hops;
  14.一个副词是quickly,或者
  15.一个副词是wildly.
  通过这些规则我们就可以使用一系列的替换直到没有规则可用为止,这样就可以得到有效的句子。例如,
sentence
noun phrase verb phrase
article adjective noun verb phrase
article adjective noun verb adverb
the adjective noun verb adverb
the large noun verb adverb
the large rabbit verb adverb
the large rabbit hops adverb
the large rabbit hops quickly
这样就得到一个有效的句子,我们也可以得到其它的有效的句子,如:a hungry
mathematician eats wildly; a large mathematician hops; the rabbit eats quickly等。我们也可以看到 the quickly eats mathematician 不是一个有效的句子。

9.1.1 

在定义语法之前,我们先给出一个术语。
9.1.1.VVV()λ,VV  V  λ,ϕ{λ} 
  语言可以用很多方法给出来,一种方法是把语言中的所有词都列举出来,另一种方法是给出语言中的词所必须满足的一些标准。这一节我们将讨论另外一种给定语言的重要方法,即利用语法,如象我们前面说过的那样包含若干规则的集合,一个语法给出了一个各种符号的集合和一个产生词的规则集合。精确地说,一个语法有一个字母表V,它是用来产生语言的符号集合,字母表中的一些符号不能被其它符号代替,称为终止符,另外一些符号能被其它符号所代替,称为非终止符。终止符集合非终止符的集合分别记为T和N。
  在前面给的例子中,终止符集合是 {a,the,rabbit,mathematician,hops,eats,quickly,wildly}  ,非终止符集合是 {sentence,nounphrase,verbphrase,adjective,article,noun,verb,adverb}  。字母表中有一个特殊的元素称为初始符,记为S,我们通常都是从这个符号S开始的。在前面的例子中,初始符是sentence。那些决定我们什么时候可以替换 V    中的符号串的规则称为语法的产生式。产生式记为 w 0 w 1   ,它表示 w 0   可以被 w 1   替换。

9.1.2.G=(V,T,S,P),VTVSVPVTNNP 
9.1.1.G=(V,T,S,P),V={a,b,A,B,S},T={a,b},SP={SABa,ABB,Bab,ABb},G 
 

9.1.3.G=(V,T,S,P)w 0 =lz 0 r(lz 0 r)w 1 =lz 1 rVz 0 z 1 Gw 1 w 0 w 0 w 1 w 0 ,w 1 ,,w n ,n0,Vw 0 w 1 ,w 1 w 2 ,,w n1 w n w n w 0 w 0 w n w 0 w n  
9.1.2.9.1.1.AabaABaBababababaABa使Bab,ABB,Bab,BabABaAabaBBabaBababaabababa. 

9.1.4.G=(V,T,S,P)G(G)SL(G)={wT  |Sw} 
9.1.3.GV={S,A,a,b},T={a,b},SP={SaA,Sb,Aaa},L(G)? 
Sbb,AaaaAaaa,L(G)={b,aaa} 

9.1.4.GV={S,0,1},T={0,1},SP={S11S,S0},L(G)? 
S0S0S11S11S11S1101111S,1111S11110111111SS1S0L(G)={0,110,11110,1111110,},10 

9.1.5.{0 n 1 n |n=0,1,2,} 
0101SG=(V,T,S,P),V={0,1,S},T={0,1},SS0S1;Sλ01010101 

9.1.6.{0 m 1 n |mn}. 
G 1 ,G 2 ,G 1 V={S,0,1},T={0,1},S0S,SS1,Sλmm0nn1G 2 V={S,A,0,1},T={0,1},S0S,S1A,S1,A1A,A1Sλ 

9.1.7.{0 n 1 n 2 n |n=0,1,2,}G=(V,T,S,P),V={0,1,2,S,A,B},T={0,1,2},S,S0SAB,Sλ, BAAB,0A01,1A11,1B12,2B22 

9.1.2 

使01w 1 w 2 ,w 2  w 1 w 1 λ2w 1 w 2 ,w 1 3w 1 w 2 w 1 =Aw 2 =aBw 2 =a,ABaw 1 λ 
32211022lw 1 rlw 2 r(w 1 w 2 )1w 1 lrw 2 3 

9.1.8.9.1.6{0 m 1 n |mn}G 2 S0S,S1A,S1,A1A,A1Sλ 

9.1.9.9.1.5{0 n 1 n |n=0,1,2,}S0S1Sλ§9.4 

9.1.10.{0 n 1 n 2 n |n=0,1,2,}12S0SAB,Sλ,BAAB,0A01,1A11,1B12,2B22. 

表9.1.1 语法的类型

类型对于产生式的限制 w 1 w 2  
0没有任何限制
1 w 1   的长度小于等于 w 2   的长度,或者 w 2 =λ 
2 w 1 =A,A  是非终止符。
3 Sλ,w 1 =Aw 2 =aBw 2 =a,A,B 

9.1.3 

  一个由上下文无关的语法产生语言的演绎可以用一个有序的树来表示,称为演绎树。这个树的根代表初始符。树的分支结点代表演绎中出现的非终止符,树的叶节点代表演绎中出现的终止符。如果在演绎过程中使用了产生 Aw,w  是一个词,那么代表A的节点把代表 w  的每个符号的结点做为儿子结点,顺序是从左到右。

例9.1.11.给出的例子中关于the hungry rabbit eats quickly的演绎的演绎树。
 
图09-01

 

9.1.12.caabG=(V,T,S,P)V={a,b,c,A,B,C,S},T={a,b,c},SSAB,ACa,BBa,BCb,Bb,Ccb,Cb 
S使cbab.SSAB使AACa,SABCaB,cbabcb使CcbSABCaBcbaB使Bb,SABCaBcbaBcbab使cbabCcb,Cabcbab,使ACa,AbCabcbab,使Bb,ABAbCabcbab,使SABcbab:SABAbCabcbab. 

9.1.4BackusNaurform 

2BackusNaur form,JohnBackusPeterNaurALGOL.BackusNaur formjava2使,使::=,<>线AAa,Aa,AAB 
<A><A>a|a|<A><B>

9.1.13.BackusNaur form? 
:BackupsNaur form 

<sentence>
::=<noun phrase><verb phrase><noun phrase>
::=<article><adjective><noun>|<article><noun>
<verb phrase>::=<verb><adverb>|<verb>
<article>::=a | the
<adjective>::= large | hungry
<noun>::=rabbit | mathematician
<verb>::=eats | hops
<adverb>::=quickly | wildly

9.1.14.BackusNaur form. 
BackusNaur form 

<十进制整数>::=<符号><非负整数>
<符号>::=+|-
<非负整数>::=<数字>|<数字><非负整数>
<数字>::=0|1|2|3|4|5|6|7|8|9
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值