文法是用来定义语言的一个模型,常用的文法体系为Chomsky文法体系。

文法定义

文法G(Grammar)是一个四原组,G=(N,T,P,S),N(Non-terminator)是非终结符集合,T(Terminator)是终结符集合,P(Production)是产生式集合,S(Start)是起始符

其中:

N 交 T = 空集

P 是形式为 α -> β 的产生式

   α ∈  (N∪T)*N+(N∪T)*,也就是说α中必须有一个非终结符

   β ∈  (N∪T)* ,也就是说β可以是空串

S∈N

 

分类

1型文法 又称上下文有关文法。生成式形式为 α->β, 且 |α| < |β| 并且不存在 A->ε

2型文法 又称上下文无关文法。生成式形式为 A->α,即左边必须只有一个非终结符

3型文法 又称正则文法。

             生成式 A->wB或A->w,称为右线性文法

             生成式 A->Bw或A->w,称为左线性文法

0型文法 对生成式没有任何限制的文法称为0型文法。从0到3都是包含的关系,但是有特例,包含  A->ε 产生式的2,3型文法不属于1型文法。

四种文法产生的语言分别称为 上下文有关语言,上下文无关语言,正则语言,无限制性语言。

 

2型语言的表示法

2型语言是很重要的一种语言,除了用四元组的方法表示,此处再介绍两种表示方法。

当人们要解释或者讨论程序设计语言本身时,经常又需要一种语言,被讨论的语言叫做对象语言,即某种程序设计语言,讨论对象语言的语言称为元语言,即元语言是描述语言的语言。BNF范式通常被作为讨论某种程序设计语言语法的元语言,而语法图是与BNF范式的描述能力等价的另一种文法表示形式,因其直观性而经常采用。

(1)巴科斯范式(Backus Normal Form,BNF)

2型文法生成式左端只有一个非终结符,所以可以把左端相同的生成式合并在一起,右端用|隔开,用::=代替->,所有非终结符用<>括起来,这是Backus为了描述AIGOL语言首次提出并使用的。

用BNF描述十进制整数的生成语法:

<无符号整数> ::= <数字>|<数字><无符号整数>

<数字> ::= 0|1|2|3|4|5|6|7|8|9

(2)语法图

语法图有四种基本形式

(3)推导树

2型文法还经常用推导树表示