我无法阐明斯基2型(上下文无关语言)和乔姆斯基3型(正规语言)之间的差异。
有人在那里可以给我用简单的英语回答? 我无法理解整个层次的东西。
我无法阐明斯基2型(上下文无关语言)和乔姆斯基3型(正规语言)之间的差异。
有人在那里可以给我用简单的英语回答? 我无法理解整个层次的东西。
甲II型语法是III型语法用栈
第II类的语法基本上是一个类型III语法筑巢。
III型语法(常规):
用例 - CSV(逗号分隔值)
特点:
例如:
this,is,,"an "" example",\r\n
"of, a",type,"III\n",grammar\r\n
只要你能找出所有的规则和边缘的情况下你可以解析CSV上面的文字。
II型文法(上下文无关):
用例 - HTML(超文本标记语言)或SGML一般
特点:
HTML可以表示为一个普通的语法:
<h1>Useless Example</h1>
<p>Some stuff written here</p>
<p>Isn't this fun</p>
但它的解析尝试这种使用FSM:
<body>
<div id=titlebar>
<h1>XHTML 1.0</h1>
<h2>W3C's failed attempt to enforce HTML as a context-free language</h2>
</div>
<p>Back when the web was still pretty boring, the W3C attempted to standardize away the quirkiness of HTML by introducing a strict specification</p
<p>Unfortunately, everybody ignored it.</p>
</body>
看到不同? 想象一下你正在写一个解析器,你可以开始在一个开放的标签,并完成在关闭标签,但是当你到达结束标记之前遇到的第二开口标签会发生什么?
这很简单,你把第一开口标签入栈,并开始解析第二个标签。 重复此过程中存在,并且如果语法结构良好,叠层可以是在相反的电平的时间的未轧制一层,它建嵌套为多个层级
由于“纯”上下文无关语言的严格性质,他们是比较少见的,除非他们由程序产生。 JSON,就是一个典型的例子。
上下文无关语言的好处是,尽管非常富有表现力,他们还是比较简单的解析。
别急,没我只是说HTML是上下文无关。 是的,如果它是良好的形成(即XHTML)。
虽然XHTML可以被认为是上下文,较为宽松的定义HTML实际上认为I型(即上下文敏感)。 是的原因,当解析器达到结构不好的代码,它实际上使有关如何解释基于上下文内容的代码的决定。 例如,如果一个元素是缺少了结束标记,就需要确定在层次结构中存在该元素才可以决定的关闭标签应放置。
其他功能,可以使一个上下文无关语言上下文敏感的包括模板,进口,预处理器,宏等。
总之,上下文敏感的语言看上去很像上下文无关语言,但一个上下文敏感的语言的要素可以根据程序状态不同的解释。
免责声明:我不是正式CompSci培训,使这个答案可能包含错误或假设。 如果你问我一个终端和非终端之间的区别,你会赚自己两眼发直。 我通过实际建设III型(普通)解析器和大约剩下的广泛阅读学到这么多。
在维基百科页面具有良好的图像和要点。
粗略地说,可以描述一个普通的语言底层机器并不需要的内存。 它运行为对输入的statemachine(DFA / NFA)。 正规语言也可以用正则表达式来表示。
与添加到它的复杂性的“下一个” A级语言是一种上下文无关语言。 描述这种语言的底层机器需要一些内存能够代表都是免费的情况下,没有规律的语言。 请注意,添加内存到您的计算机,使之更厉害一点,所以它仍然可以表达语言(例如正规语言)是没有必要开始与记忆。 底层机器通常是下推自动机 。
类型3语法包括一系列状态的。 他们无法表达嵌入。 例如,3型文法不能要求匹配括号,因为它没有办法显示,括号应该是“缠”的内容。 这是因为,德里克指出,3型语法并不“记住”对以前的状态,它穿过去的当前状态什么。
2型文法由一组“制作”(你可以把它们想象成图案),可以有嵌入他们的其他作品的。 因此,它们是递归定义。 一个生产只能在它所包含的内容来定义,而不能“看到”的本身之外; 这是什么使得语法上下文。