我正在尝试理解四种不同的乔姆斯基语言类型,但我发现的定义并不对我有任何意义。我知道类型0是自由语法,类型1是上下文敏感,类型2是上下文无关,而类型3是常规。那么,有人可以解释一下并将其置于上下文中,谢谢。
答案 0 :(得分:24)
语言是属于该语言的单词集。但是,很多时候,不是列出语言中的每个单词,而是指定生成语言单词的规则集(并且仅指定那些单词)来识别所讨论的语言。
注意:可以有多组规则可以使用相同的语言。
通常,对规则的限制越多,语言的表达就越少(从规则中生成的单词越少),但如果单词属于规则指定的语言,则更容易识别。由于后者,我们希望识别对其规则具有最多限制的语言,这些语言仍然允许我们生成相同的语言。
关于规则的几句话:一般来说,你描述了一个包含四个项目的正式语言(AKA是一个四元组):
终端符号(AKA字母)是该语言的单词所包含的符号,通常是小写英文字母的子集(例如' a',' b',&# 39; C&#39)
非终端符号在生成单词时标记中间状态,表示可能的转换仍然可以应用于中间单词"。终端和非终端符号之间没有重叠(即两个集合的交集是空的)。用于非终端的符号通常是大写英文字母的子集(例如' A',' B'' C')
规则表示对一系列终端和非终端符号的可能转换。它们的形式为:左侧 - >右侧,左侧和右侧均由一系列终端和非终端符号组成。一个示例规则:aBc - > cBa,意思是一系列符号" aBc" (作为中间人的一部分"单词")可以替换为系列" cBa"在生成单词期间。
起始符号是专用的非终端符号(通常用S表示),表示" root"或者"开始"生成一词,即在一系列文字生成中应用的第一条规则总是以起始符号为左侧。
当所有非终端都被终端替换时,一个单词的生成成功结束(所以最终的"中间词"仅由终端符号组成,这表明我们到达了一个单词语言合问题)。
当并非所有非终端都被终端替换时,单词的生成是不成功的,但是没有可以应用于当前中介的生产规则" word"。在这种情况下,生成必须按照生产规则应用程序的不同路径从起始符号重新划分。
示例:
L = { T , N , P ,S},
,其中
T = {a,b,c}
N = {A,B,C,S}
P = {S-> A,S-> AB,S-> BC,A-> a,B-> bb,C-> ccc} < / p>
表示三个单词的语言:&#34; a&#34;,&#34; abb&#34;和&#34; bbccc&#34;
规则的示例应用:
S-&GT; AB-&GT; AB-&GT; ABB
其中我们1)从起始符号(S)开始,2)应用第二条规则(用AB代替S),3)应用第四条规则(用a替换A)和4)应用第五条规则(替换B与bb)。由于结果&#34; abb&#34;中没有非终端,因此它是该语言的一个词。
在谈论规则时,希腊符号 alpha , beta , gamma 等表示(可能是空的)系列终端+非终端符号;希腊字母 epsilon 表示空字符串(即空符号系列)。
Chomsky层次结构中的四种不同类型描述了不同表达能力的语法(对规则的不同限制)。
Type 0 (或 Unrestricted )语法生成的语言最具表现力(受限制较少)。 递归可枚举语言包含可以使用图灵机(基本上是计算机)生成的语言。这意味着如果您的语言比此类型(例如英语)更具表现力,则无法编写可以列出该语言的每个(且仅限于这些)单词的算法。规则有一个限制:规则的左侧不能为空(不能引入符号&#34;蓝色&#34;)。
Type 1 (上下文相关)语法生成的语言是上下文相关的语言。规则具有以下形式的限制: alpha A beta - &gt; alpha gamma beta ,其中 alpha 和 beta可以为空, gamma 非空(例外: S-&gt; epsilon 规则,仅当起始符号S未出现在任何规则的右侧时才允许。这限制了规则在左侧至少有一个非终端,并允许它们具有&#34;上下文&#34;:此规则示例中的非终端A可以替换为 gamma < / em>,仅当它被包围时(&#34;在&#34;的上下文中) alpha 和 beta 。规则的应用保留了上下文(即 alpha 和 beta 不会改变)。
Type 2 (无上下文)语法生成的语言是 Context-free 语言。规则具有以下形式的限制:A - &gt; 伽马。这限制了规则在左侧只有一个非终端并且没有&#34; context&#34;。这实质上意味着,如果您在中间词中看到非终端符号,则可以应用其左侧具有该非终端符号的任何一个规则,以将其替换为右侧,而不管周围环境如何非终端符号。大多数编程语言都有无上下文生成语法。
Type 3 (常规)语法生成的语言是 Regular 语言。规则具有以下形式的限制:A-> a或a-> aB(如果起始符号S未出现在A上,则允许规则S-> epsilon 任何规则的右侧),这意味着每个非终端必须产生恰好一个终端符号(并且可能还有一个非终端符号)。 正则表达式生成/识别此类型的语言。
可以通过某种方式解除/修改这些限制,以保持修改后的语法具有相同的表达能力。修改后的规则可以允许其他算法识别语言的单词。
请注意(如前所述)语言通常可以由多个语法生成(甚至属于不同类型的语法)。语言家族的表达能力通常等同于可以生成这些语言的最具限制性语法类型的表达能力(例如,由常规(类型3)语法生成的语言也可以由类型2语法生成,但是它们的表现力权力仍然是第3类语法的。)
<强>实施例强>
常规语法
T = {a,b}
N = {A,B,S}
P = {S-> aA,A-> aA,A-> aB,B-> bB,B-> b}
生成的语言包含以非零数字&#39; a开头的单词,后跟非零数字的&#39; b&#39; s。请注意,无法描述一种语言,其中每个单词由多个&#39; a组成,后跟相同数量的常规语法。
无上下文语法
T = {a,b}
N = {A,B,S}
P = {S-> ASB,A-> a,B-> b}
生成的语言包含以非零数字&#39; a开头的单词,后跟相同数量的&#39; b&#39; s。请注意,无法描述一种语言,其中每个单词由多个&#39; a组成,后跟相同数量的&#39; b,后跟相同数量的& “没有上下文的语法”。
上下文相关语法
T = {a,b,c}
N = {A,B,C,H,S}
P = {S-> aBC,S-> aSBC,CB-> HB,HB-> HC,HC-> BC,aB-> ab,bB - &gt; bb,bC-> bc,cC-&gt; cc}
生成一种语言,其中包含以非零数字&#39; a开头的单词,后跟相同数量的&#39; b,然后是相同数量的& #39; C&#39; S。 H在这个语法中的作用是启用&#34;交换&#34; CB组合到BC组合,因此可以在左侧收集B,并且可以在右侧收集C。请注意,无法描述一种语言,其中的单词由一系列“a”组成,其中“a”的数量是具有上下文相关语法的素数,但是可以编写一种生成该语言的无限制语法。
答案 1 :(得分:0)
语法有4种
TYPE-0 :
语法不受限制地接受
递归可枚举语言接受的语言
自动机是车床
TYPE-1 :
上下文敏感语法接受的语法
上下文相关语言接受的语言
自动机是线性有界自动机
TYPE-2 :
上下文无关语法接受的语法
上下文无关语言接受的语言
自动机是 PushDown自动机
TYPE-3 :
常规语法接受的语法
常规语言接受的语言
自动机是有限状态自动机
Chomsky 是每个产品都具有以下形式的 Normal形式:
规则中可以有两个变量或只有一个终端 Chomsky