第一:
-
Σ 表示语言符号。用你的语言Σ = {a, b}
-
^ 表示空符号(这是理论上的,^ 不是任何语言符号的成员)
-
ε 表示空字符串(这是理论上的,ε 可以是某种语言的成员)
见^ 符号没有任何意义,但我们只是将它用于理论目的,就像我们在数学中使用的∞ 无穷大符号(实际上没有数字是∞,但我们用它来理解,证明一些定理)类似^ 只是我们使用它。
这点没有写在任何书上,我写它是为了解释/理解观点。该学科更多属于理论和数学,我来自计算机科学。
正如你所说,你的语法是L = {a<sup>m</sup> b<sup>n</sup> | m != n}。假设产生式如下:
首先:
S --> aSb | A | B
A --> aA | Σ
B --> bB | Σ
意思是。(非常稀有的书可能在语法规则中使用Σ)
S --> aSb | A | B
A --> aA | a | b
B --> bB | a | b
我将 Σ 替换为 a | b(a、b 语言符号)。
此语法可以生成相同数量的符号a 和符号b(a<sup>n</sup> b<sup>n</sup>) 的字符串。它如何生成a<sup>n</sup> b<sup>n</sup>?请参阅下面的示例推导:
S ---> aSb ---> aAb ---> aaAb ---> aabb
^ ^ ^ ^
rule-1 S-->A A--> aA A --> b
但是这种字符串在语言 L 中是不可能的,因为 m != n。
第二:
出于同样的原因,如果A --> aA | Σ 或B --> bB | Σ 在语法中,则生产规则S --> aSb | aA | bB 也不是正确的语法。
我认为在第二种语法中你的意思是:
S --> aSb | aA | bB
A --> aA | ^
B --> bB | ^
那么这是语言L = {a<sup>m</sup> b<sup>n</sup> | m != n} 的正确语法。因为使用:
S --> aSb
您只能生成相同数量的 a' 和 b 并通过将 S 替换为 aA 或 bB 您制作一种句子形式,其中存在不相等数量的 a 和 b 符号,并且无法转换回生成 a<sup>n</sup> b<sup>n</sup> 类型的字符串。 (因为A 不会生成b 和B 不会生成a)。
第三:
但通常我们会写这样的语法规则:
S --> aSb | A | B
A --> aA | a
B --> bB | b
两种形式是等效的(生成相同的语言L = {a<sup>m</sup> b<sup>n</sup> | m != n}),因为一旦将S 转换为A 或B,您必须至少生成一个a 或b(或更多)分别,因此约束 m != n 成立。
记住校对,两个语法是否等价是undecidable problem。我们无法通过 算法证明它(但在逻辑上是可行的,因为我们人类的大脑比处理器更好:P :))。
第四:
最后我还要补充一句,语法:
S --> aSb | A | B
A --> aA | ^
B --> bB | ^
不会生成L = {a<sup>m</sup> b<sup>n</sup> | m != n},因为我们可以生成a<sup>n</sup> b<sup>n</sup>,例如:
S ---> aSb ---> aAb ---> ab
^
A --> ^
正式语言的语法
任何class of formal languages 都可以用由四元组(S, V, Σ, P) 组成的正式语法来表示。 (注意语法或自动机都是有限表示天气语言是有限或无限的:检查数字one 和two)。
Σ:有限的语言符号集。
在语法中,我们通常称之为终端的有限集(与变量V相反)。语言符号或终端是事物,使用它们构造语言字符串(句子)。在您的示例终端集Σ 是{a, b}。在自然语言中,您可以将终端与词汇或字典单词相关联。
自然语言是指我们所说的印地语、英语
V:非终结符的有限集。
非终结符或说“变量”,应始终参与语法产生规则。 (否则变量会计入无用变量,即不派生终结符或什么都没有的变量)。
请参阅:'语法的最终目标是正确生成语言的字符串因此,每个变量都应该以某种方式有用。
在自然语言中,您可以将变量集与定义语言的特定语义属性的名词/动词/十位相关联(例如动词表示吃/睡觉,名词表示他/她/Xiy 等)。
注意:在一些书籍中可以找到V ∩ Σ = ∅,这意味着变量不是终结符。
S:开始变量。 (S ∈ V)
S是一个特殊的变量符号,称为“起始符号”。如果字符串可以从起始变量S 派生,我们只能考虑语法 L(G) 语言中的字符串。如果一个字符串不能从S派生出来(即使它由语言符号Σ组成),那么在语法语言中将不考虑字符串(实际上该字符串属于L(G)的“补语”,我们写补充语言L<sup><strong>'</strong></sup> = Σ<sup>*</sup> - L(G),检查:"the complement language in case of regular language")
-
P:生产规则的有限集。
生产规则在fromα --> β中定义了替换规则,这意味着在从S推导字符串的过程中,从语法规则中随时α(lhs)可以被β(rhs)替换。(this类似于自然语言中的名词可以替换为he、she或Xiy,动词可以替换为吃、睡等。
产生规则定义了语言句子的形成规则。形式语言类似于自然语言,具有某种模式,即某种事物可以以某种形式出现——我们在编程语言中称之为语法。并且由于这种语法能力,用于语法检查的语法称为 parse)。
注意:α --> β、α 和β 都由语言符号和终端@ 组成987654399@ 有一个约束,即在α 中,它们必须至少是一个变量。 (因为我们只能用规则的 rhs 替换包含变量的字符串。一个终端不能被另一个终端替换,或者我们可以说一个句子不能被另一个句子替换)
记住:字符串有两种形式Sentential Form and Sentence:
-
Sentence: 如果所有符号都是终结符(句子可以是 L(G) 或补语L<sup><strong>'</strong></sup> = Σ<sup>*</sup> - L)
-
Sentential: 如果任何符号是可变的(不是语言字符串而是派生字符串)
来自@MAV(谢谢!!):
表示上述语言L = {a<sup>m</sup> b<sup>n</sup> | m != n}的语法,4元组是:
V = {S, A, B}
Σ = {a, b}
P = {S --> aSb | A | B, A --> aA | a, B --> bB | a}
S = S
注意:一般我用P 表示Production 规则,你的书可以用R 表示rules
形式语言理论中的术语使用和自动化
注意:∅ 表示集合为空,ε 表示字符串为空,^ 表示无符号(理论上不要混用,语义不同)
我不知道关于符号表示法的规则,但这些是我在学习期间观察到的大多数标准书籍中曾经可以找到的常用术语。
下一篇:Tips for writing Context free grammar