fbpx
维基百科

上下文无关文法

上下文无关文法(英語:context-free grammar,縮寫為CFG),在计算机科学中,若一个形式文法 G = (V, Σ, P, S) 的产生式规则都取如下的形式:A -> α,則謂之。其中 A∈V ,α∈(V∪Σ)* 。上下文无关文法取名为“上下文无关”的原因就是因为字符 A 总可以被字串 α 自由替换,而无需考虑字符 A 出现的上下文。如果一个形式语言是由上下文无关文法生成的,那么可以说这个形式语言是上下文无关的。(条目上下文无关语言)。

上下文无关文法重要的原因在于它们拥有足够强的表达力来表示大多数程序设计语言的语法;实际上,几乎所有程序设计语言都是通过上下文无关文法来定义的。另一方面,上下文无关文法又足够简单,使得我们可以构造有效的分析算法来检验一个给定字串是否是由某个上下文无关文法产生的。例子可以参见LR分析器LL分析器

BNF(巴克斯-诺尔范式)经常用来表达上下文无关文法。

形式定义

上下文无关文法 G 是 4-元组

 

这里的

  1.   是“非终结”符号或变量的有限集合。它们表示在句子中不同类型的短语或子句。
  2.   是“终结符”的有限集合,无交集于  ,它们构成了句子的实际内容。
  3.   是开始变量,用来表示整个句子(或程序)。它必须是   的元素。
  4.   是从    的关系,使得  

此外,  是有限集合。  的成员叫做文法的“规则”或“产生式”。星号表示Kleene星号运算。

补充定义 1

对于任何字符串  ,我们称   生成  ,写为  ,如果   使得   。因此   是应用规则    的结果。

补充定义 2

对于任何  (或   在某些教科书中),如果   使得  

补充定义 3

文法   的语言是集合

 

补充定义 4

语言   被称为是上下文无关语言(CFL),如果存在一个 CFG   使得  

例子

例子 1

一个简单的上下文无关文法的例子是:S -> aSb | ab 。这个文法产生了语言 {anbn : n ≥ 1} 。不难证明这个语言不是正则的。

例子 2

这个例子可以产生变量 x,y,z 的算术表达式:

S -> T + S | T - S | T
T -> T * T | T / T | ( S ) | x | y | z

例如字串 "( x + y ) * x - z * y / ( x + x )" 就可以用这个文法来产生。

例子 3

字母表 {a,b} 上 a 和 b 数目不相等的所有字串可以由下述文法产生:

S -> U | V
U -> TaU | TaT
V -> TbV | TbT
T -> aTbT | bTaT | ε

这里 T 可以产生 a 和 b 数目相等的所有字串,U 可以产生 a 的数目多于 b 的数目的所有字串, V 可以产生 a 的数目少于 b 的数目的所有字串。

推导与语法树

最左推导

在推导的任何一步α=> β中,都是对α中的最左边非终结符进行替换。 如文法:

S -> AB
A -> a|t
B -> +CD
C -> a
D -> a

那么最左推导为:

S => AB => aB => a+CD => a+aD => a+aa

范式

每一个不生成空串的上下文无关文法都可以转化为等价的Chomsky 范式Greibach 范式。这里两个文法等价的含义指它们生成相同的语言。

由于Chomsky范式在形式上非常简单,所以它在理论和实践上都有应用。比如,对每一个上下文无关语言,我们可以利用Chomsky范式构造一个多项式算法,用它来判断一个给定字串是否属于这个语言(CYK算法)。

参见

引用

  • Chomsky, Noam (Sept. 1956). "Three models for the description of language". Information Theory, IEEE Transactions 2 (3).

延伸阅读

  • Michael Sipser. Introduction to the Theory of Computation. PWS Publishing. 1997. ISBN 978-0-534-94728-6.  Section 2.1: Context-Free Grammars, pp.91–101. Section 4.1.2: Decidable problems concerning context-free languages, pp.156–159. Section 5.1.1: Reductions via computation histories: pp.176–183.

上下文无关文法, 英語, context, free, grammar, 縮寫為cfg, 在计算机科学中, 若一个形式文法, 的产生式规则都取如下的形式, 則謂之, 其中, 取名为, 上下文无关, 的原因就是因为字符, 总可以被字串, 自由替换, 而无需考虑字符, 出现的上下文, 如果一个形式语言是由生成的, 那么可以说这个形式语言是上下文无关的, 条目上下文无关语言, 重要的原因在于它们拥有足够强的表达力来表示大多数程序设计语言的语法, 实际上, 几乎所有程序设计语言都是通过来定义的, 另一方面, 又足够简单, . 上下文无关文法 英語 context free grammar 縮寫為CFG 在计算机科学中 若一个形式文法 G V S P S 的产生式规则都取如下的形式 A gt a 則謂之 其中 A V a V S 上下文无关文法取名为 上下文无关 的原因就是因为字符 A 总可以被字串 a 自由替换 而无需考虑字符 A 出现的上下文 如果一个形式语言是由上下文无关文法生成的 那么可以说这个形式语言是上下文无关的 条目上下文无关语言 上下文无关文法重要的原因在于它们拥有足够强的表达力来表示大多数程序设计语言的语法 实际上 几乎所有程序设计语言都是通过上下文无关文法来定义的 另一方面 上下文无关文法又足够简单 使得我们可以构造有效的分析算法来检验一个给定字串是否是由某个上下文无关文法产生的 例子可以参见LR分析器和LL分析器 BNF 巴克斯 诺尔范式 经常用来表达上下文无关文法 目录 1 形式定义 2 例子 2 1 例子 1 2 2 例子 2 2 3 例子 3 2 4 推导与语法树 2 4 1 最左推导 3 范式 4 参见 5 引用 6 延伸阅读形式定义 编辑上下文无关文法 G 是 4 元组 G V S R S displaystyle G V Sigma R S 这里的 V displaystyle V 是 非终结 符号或变量的有限集合 它们表示在句子中不同类型的短语或子句 S displaystyle Sigma 是 终结符 的有限集合 无交集于 V displaystyle V 它们构成了句子的实际内容 S displaystyle S 是开始变量 用来表示整个句子 或程序 它必须是 V displaystyle V 的元素 R displaystyle R 是从 V displaystyle V 到 V S displaystyle V cup Sigma 的关系 使得 w V S S w R displaystyle exists w in V cup Sigma S w in R 此外 R displaystyle R 是有限集合 R displaystyle R 的成员叫做文法的 规则 或 产生式 星号表示Kleene星号运算 补充定义 1对于任何字符串 u v V S displaystyle u v in V cup Sigma 我们称 u displaystyle u 生成 v displaystyle v 写为 u v displaystyle u Rightarrow v 如果 a b R u 1 u 2 V S displaystyle exists alpha beta in R u 1 u 2 in V cup Sigma 使得 u u 1 a u 2 displaystyle u u 1 alpha u 2 且 v u 1 b u 2 displaystyle v u 1 beta u 2 因此 v displaystyle v 是应用规则 a b displaystyle alpha beta 于 u displaystyle u 的结果 补充定义 2对于任何 u v V S u v displaystyle u v in V cup Sigma u stackrel Rightarrow v 或 u v displaystyle u Rightarrow Rightarrow v 在某些教科书中 如果 u 1 u 2 u k V S k 0 displaystyle exists u 1 u 2 cdots u k in V cup Sigma k geq 0 使得 u u 1 u 2 u k v displaystyle u Rightarrow u 1 Rightarrow u 2 cdots Rightarrow u k Rightarrow v 补充定义 3文法 G V S R S displaystyle G V Sigma R S 的语言是集合 L G w S S w displaystyle L G w in Sigma S stackrel Rightarrow w 补充定义 4语言 L displaystyle L 被称为是上下文无关语言 CFL 如果存在一个 CFG G displaystyle G 使得 L L G displaystyle L L G 例子 编辑例子 1 编辑 一个简单的上下文无关文法的例子是 S gt aSb ab 这个文法产生了语言 anbn n 1 不难证明这个语言不是正则的 例子 2 编辑 这个例子可以产生变量 x y z 的算术表达式 S gt T S T S T T gt T T T T S x y z例如字串 x y x z y x x 就可以用这个文法来产生 例子 3 编辑 字母表 a b 上 a 和 b 数目不相等的所有字串可以由下述文法产生 S gt U V U gt TaU TaT V gt TbV TbT T gt aTbT bTaT e这里 T 可以产生 a 和 b 数目相等的所有字串 U 可以产生 a 的数目多于 b 的数目的所有字串 V 可以产生 a 的数目少于 b 的数目的所有字串 推导与语法树 编辑 最左推导 编辑 在推导的任何一步a gt b中 都是对a中的最左边非终结符进行替换 如文法 S gt AB A gt a t B gt CD C gt a D gt a那么最左推导为 S gt AB gt aB gt a CD gt a aD gt a aa范式 编辑每一个不生成空串的上下文无关文法都可以转化为等价的Chomsky 范式或Greibach 范式 这里两个文法等价的含义指它们生成相同的语言 由于Chomsky范式在形式上非常简单 所以它在理论和实践上都有应用 比如 对每一个上下文无关语言 我们可以利用Chomsky范式构造一个多项式算法 用它来判断一个给定字串是否属于这个语言 CYK算法 参见 编辑下推自動機 上下文有关文法 形式文法 分析表达式文法 随机上下文无关文法 巴科斯范式 乔姆斯基范式 Greibach范式引用 编辑Chomsky Noam Sept 1956 Three models for the description of language Information Theory IEEE Transactions 2 3 延伸阅读 编辑Michael Sipser Introduction to the Theory of Computation PWS Publishing 1997 ISBN 978 0 534 94728 6 Section 2 1 Context Free Grammars pp 91 101 Section 4 1 2 Decidable problems concerning context free languages pp 156 159 Section 5 1 1 Reductions via computation histories pp 176 183 取自 https zh wikipedia org w index php title 上下文无关文法 amp oldid 66485958, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。