前言
在研究自然语言时,人们发现名词、动词、介词以及它们的短语之间存在着自然的递归关系,因此引入了 上下文无关文法(CFG) 来帮助整理和理解这种关系。同时,上下文无关文法在程序设计语言的规范化及编译中有重要应用。设计人员在编写程序设计语言的编译器和解释器时,通常需要先获取该语言的文法,因此在大多数的编译器和解释器中都包含了一个 语法分析器 。与上下文无关文法相关的语言集合称为 上下文无关语言(CFL)。
上下文无关语法概述
给出一个上下文无关语法的示例,称其为 :
一个文法是由一组 替换规则 或称 产生式 组成;每条规则占一行,由一个符号和一个字符串构成,中间用箭头隔开;符号称为 变元,字符串则由变元和另一种称为 终结符 的符号构成,通常第一条规则的左边的变元被指定为 起始变元 ;则文法 有3条规则,
和
是变元,其中
是起始变元,
和
是终结符;
按照以下方法,能够根据文法生成其所描述的语言的每一个字符串:
- 写下起始变元
- 取一个已写下的变元,并找到该变元开始的规则,把这个变元替换成规则右边的字符串
- 重复步骤2,直到写下的字符串中没有变元为止
例如,文法 生成的字符串
。获取一个字符串的替换序列称为 派生;文法
生成字符串
的派生过程如下:
用上述方式生成的所有字符串构成该 文法的语言;用 表示文法
的语言,可以得出
{
},该语言称为 上下文无关语言 ;通常对于
和
可以合并为
上下文无关文法形式化定义
-
有穷 变元 集
-
有穷 终结符 集
-
有穷 规则 集 (形如
)
-
初始变元
设 和
是由变元及终结符构成的字符串,
是文法的一条规则,称
生成
,记作
。如果
,或者存在序列
,使得
其中 ,则称
派生
,记作
。该语言的文法是 {
};
网友评论