软件工程之文法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xyf13920745534/article/details/82317921

是什么
文法是一种形式语言的描述。当我们要描述一种语言时,需要给出这种语言的所有句子,当句子的数目是有限可数时,就要都列出来;当句子是一个无穷集,也就是无限不可数时,就要给出可以表示它们的结构的描述方法或者说,句子的组成规则。这种规则就是文法。
下面是文法的定义

文法G定义为一个四元组( N , T ,P,S),其中, N 为非终结符集合, N 终结符集合;P是产生式结合;S称为识别符或开始符号,也是一个非终结符,至少要在一条产生式的左边出现。

终结符:不可分割的符号,一般用小写字母表示,如a,b,c,d
非终结符:可分割的符号,一般用大写字符表示,如A,B,C,D
终结符就是推导到终结符时,不可再推导下去;而非终结符可以继续推导下去。

四种文法的名称
文法 别称 对应
0型文法 短语文法
1型文法 上下文有关文法 线性有界自动机
2型文法 上下文无关文法 下推自动机
3型文法 正规文法 有限状态自动机

0型文法(PSG):

α∈( N T )* ,且至少含一个 N
β∈( N T )*
对产生式没有任何限
例如:A0→A0 , A1→B
0型文法是这几类文法中,限制最少的一个。

1型文法

对任一产生式α→β,都有|β|>=|α|, 仅仅 S→ε除外
|β|表示的是长度,意思是说左边的推导式长度要小于右边的推导式传给长度

2型文法(CFG)

2型文法:对任一产生式α→β,都有α∈ N ,β∈( N T )*

3型文法(RG)

每个产生式均为 “A→aB”或“A→a” —— 右线性
“A→Ba”或“A→a” —— 左线性
其中,A、B∈ N ,a∈ T *
例如:G[S]: S→0A | 0
  A→1B | B
  B→1 | 0

猜你喜欢

转载自blog.csdn.net/xyf13920745534/article/details/82317921