CS4114 形式语言与自动机

Chapter 6 Context-Free Grammars and Languages

| 关于   «  4. CFG 练习   ::   目录   ::   6. 文法变换练习  »

5. 文法的变换

5.1. 文法的变换

编程语言开发者经常使用文法来表示编程语言的语法。 当然,与实现一种编程语言(或对文法的任何其他使用)相关的关键问题是: 给定的程序在语法上是否正确? 这完全等同于问:这个串是否在该文法定义的语言中(成员问题)。

我们已经看到,如果能把一个 CFG 变换为等价的、 没有 \(\lambda\)-产生式、也没有类似 \(A \rightarrow B\) 规则的 CFG, 那么我们就可以在 \(2|w|\) 轮推导内确定串 \(w\) 是否在 \(L(G)\) 中, 其中每一步都会增加一个终结符,或者增加当前推导的句式的长度。 这样做可行,但速度不快! 至少它避免了陷入无限循环的可能性。

我们将研究一些变换文法的方法。 有时我们这样做是为了创建一个更容易处理的文法版本。 有时我们只是想知道我们 能够 把文法变换到某种给定形式, 因为假设文法处于那种形式会让它在证明中更容易使用。

在本模块中我们要回答的问题:
是否存在某种变换(限制)CFG 的方法,使得:
1) 我们能够高效地处理它们?
2) 同时又不会限制 CFG 的能力?
Settings

Proficient Saving... Error Saving
Server Error
Resubmit

5.2. 删除无用产生式

Settings

Proficient Saving... Error Saving
Server Error
Resubmit

5.3. 删除 Lambda 产生式

Settings

Proficient Saving... Error Saving
Server Error
Resubmit

5.4. 删除单元产生式

Settings

Proficient Saving... Error Saving
Server Error
Resubmit

5.5. 乔姆斯基范式(CNF)

Settings

Proficient Saving... Error Saving
Server Error
Resubmit

5.6. 格雷巴赫范式(GNF)

Settings

Proficient Saving... Error Saving
Server Error
Resubmit

   «  4. CFG 练习   ::   目录   ::   6. 文法变换练习  »

关闭窗口