2.文法和语言的形式定义
文法是描述语言的,所以语言的定义以文法为基础。
(1)文法:
文法是描述语言的语法结构的形式规则(亦称文法规则,产生式或重写规则等)。文法规则必须是准确且是可理解的。
定义2.9(文法)
一部文法G是一个四元组
G=(V
T,V
N,S,P)
其中:
V
T:非空有限的终结符号集(一般用小写字母表示)。
出现在句子中的符号称为终结符号。例如组成语言的基本符号、单词符号都是语言的终结符号。从语法分析的角度看,终结符号是一个语言不可再分的基本符号。
V
N:非空有限非终结符号集(一般用大写字母表示)。设V是文法G的符号集,则有V=V
T∪V
N, V
T∩V
N=⊙。
非终结符是一个语法范畴,表示一类具有某种性质的符号。它不出现在句子中,而出现在文法的产生式的左部。
例如,前述汉语文法的子集中,<句子>,<主语>,<谓语>,<名词>等都为非终结符。
S:文法的开始符号或识别符号,亦称公理,S∈V
N。S代表语言最终要得到的语法范畴:例如前述汉语文法的子集中的<句子>即为该文法的开始符号。
P:产生式集。所谓产生式就是按一定格式书写的定义语法范畴的文法规则,它是一部文法的实体。产生式的形式为,P→M或P∷=α,其中P称为产生式的左部,α为产生式的右部或称为P的候选式,有P∈V
+,α∈V
*。注意,公理S至少且必须在文法某个产生式的左部出现一次。
例2.2 数字文法定义为
<NUMBER>→0|1|2|3|...|9
其中,V
N={NUMBER},V
T={0,1,2,...,9},S=V
N,P为定义式本身。
注意,文法产生式中的一些符号“→”,“|”,等要与非终结符和终结符相区别。它们被称
为元语言符号。我们称描述另一种语言的语言是元语言,元语言中的符号称为元语言符号。
例如,简单的算求表达式文法Gl定义为
{{E},{i,+,*,(,)},{E},{E→i|i+i|i*i|(E)}}
(2)语言:
如果给定—部文法G,G的语言是什么?语言的句子是什么?文法中的规则可以帮助分析或构造句子。由给定文法生成句子的思想是:从文法的开始符号出发,对当前产生式的符号串中的非终结符替换为相应产生式右部的符号串,如此反复,直至最终符号串全由终结符号组成。
例2.3 试以例2.1给出的文法和句子为例考察如何应用文法产生句子。
<句子> => <主语> <谓语> //<句子>替换为<主语><谓语>
=> <形容词> <名词> <谓语> //<主语>替换为<形容词><名词>
=> 小 <名词> <谓语> //<形容词>替换为“小”
=> 小八哥 <谓语> //<名词>替换为“八哥”
=> 小八哥 <动词> <宾语> //<谓语>替换为<动词><宾语>
=> 小八哥吃 <宾语> //<动词>替换为“吃”
=> 小八哥吃 <形容词> <名词> //<宾语>替换为<形容词><名词>
=> 小八哥吃大 <名词> //<形容词>替换为“大”
=> 小八哥吃大花生 //<名词>替换为“花生”
到此为止,所得到的符号串中已经全部由终结符组成,这就是文法产生的语言的一个句子。为此,给出语言的非形式定义。
定义2.10(语言)
从文法G的公理S出发,反复使用产生式对非终结符进行替换,最终得到的终结符串的全体,称为文法G表示的语言,记作L(G)。
例2.4设有文法G
S->P|aPb
P->ba|bQa
Q->ab
有L(G)={ba,baba,abab,ababab}