我爱编程

形式语言总结(上下文无关文法与正则文法)

2018-04-16  本文已影响2425人  Crystalajj

形式语言理论

形式语言理论是用数学方法研究自然语言和人工语言如程序设计语言的语法的理论。它只研究语言的组成规则,不研究语言的含义。形式语言理论在自然语言的理解和翻译、计算机语言的描述和编译、社会和自然现象的模拟、语法制导的模式识别等方面有广泛的应用。

形式语言的形式文法

形式文法被严格地定义为四元组G=(N,T,P,S),

重点研究的四类文法:

根据P中生成式a→β的特点,可以将形式文法及其产生的形式语言分类,构成所谓的形式语言谱系。形式语言理论中重点研究四类文法和语言:

上述定义的4种语言类具有依次包含关系,即对于i=0,1,2,在不考虑空字符串时,i型语言都真包含i+1型语言。

上下文无关文法(2型文法)

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

由于 Chomsky 范式在形式上非常简单,所以它在理论和实践上都有应用。比如,对每一个上下文无关语言,我们可以利用 Chomsky 范式构造一个多项式算法,用它来判断一个给定字串是否属于这个语言(CKY算法[限制:P满足Chomsky范式],chart算法[Generalize the CKY algorithm for all CFG])。

CYK算法是基于动态规划思想设计的一种对上下文无关语言进行自底向上语法分析算法。
算法解析

在一个形式文法Chomsky 范式的,当且仅当所有产生规则都有如下形式:

  • ABC
  • A→ α 或
  • S→ ε
    这里的A,BC是非终结符,α 是终结符(表示常量值的符号),S是开始符号,而 ε 是空串。还有,BC都不可以是开始符号。
    所有的 Chomsky 范式的文法都是上下文无关,反过来,所有上下文无关文法都可以有效的变换成等价的 Chomsky 范式的文法。

还有一种范式Greibach Normal Form,满足以下规则:
A→aα,α∈N*(非终结符集合)

上下文无关文法与正则文法的区别

正则定义与上下文无关文法的重要区别在于,在正则定义中是不允许递归定义的,例如A → aA|b不是一个正则定义,为其左边的A必须是一个新的符号,也就是说不能在其他地方定义过,但是其右边要求每一个符号都是定义过的,因此这个定义无法满足。而上下文无关文法则没有这个约束,因此A → aA|b是一个上下文无关文法的产生式,但不是正则定义的定义式。

正则表达式在编译器构建中一般用来进行词法分析,通过NFA、DFA就可以识别,而更复杂的文法就需要以来其他算法了。

PPT1
PPT2

上一篇下一篇

猜你喜欢

热点阅读