看到在乔姆斯基层次结构中,类型3语言可以由没有外部存储器的状态机(即有限自动机)识别,类型2由具有单个堆栈的状态机(即下推自动机)识别,类型0可以通过类型识别。一个具有两个堆栈的状态机(或者等效地,一个磁带,就像图灵机的情况一样),类型1的语言如何适合这张图片?而且,确定一种语言不仅是Type 0还是Type 1会带来什么优势?
看到在乔姆斯基层次结构中,类型3语言可以由没有外部存储器的状态机(即有限自动机)识别,类型2由具有单个堆栈的状态机(即下推自动机)识别,类型0可以通过类型识别。一个具有两个堆栈的状态机(或者等效地,一个磁带,就像图灵机的情况一样),类型1的语言如何适合这张图片?而且,确定一种语言不仅是Type 0还是Type 1会带来什么优势?
Answers:
上下文相关的语言正是图灵机可以使用线性空间和非确定性识别的语言。您可以使用指数时间来模拟这样的图灵机,因此您可以在指数时间内识别任何这样的语言。请注意,识别某些上下文相关语言的问题是 -complete,这意味着我们很确定您做得不会比指数时间更好。
比较这键入0语言,这意味着你至少可以说的东西大概需要多长时间来识别的语言。0类语言甚至可能不是可判定的:所有停止运行的Turing机器的语言都是0类语言,但是由于识别该语言恰好是制止问题,所以它不是可判定的。
上下文相关的语法在实践中不是很有用。上下文免费语法是直观与工作,但因为在维基百科上显示的示例中,上下文敏感文法很快变得相当凌乱。使用多项式空间的程序更容易设计(并且完整性保证了某些等效CSG的存在,其数量仅比算法的空间使用数大)。
它们存在的原因是它们形成了上下文无关语法的非常自然的扩展(您可以让上下文确定哪些乘积有效)。这可能会激发乔姆斯基定义它们并将它们命名为1类语言。请记住,这个定义是在计算机像今天这样发展之前做出的:与语言相比,形式语言理论家更感兴趣。
不受限制的语法变得更加奇怪:不再存在“扩展”非终结符并将其替换为产生式的想法,这可能取决于上下文。您也可以自由修改上下文。这使无限制的语法使用起来更加不直观:程序是等效的,而且更加直观。
一般来说,您通常想知道给定语言所属的较小类。这是因为较小的类别可以通过更简单的机制(自动机,语法,正则表达式等)识别/接受/生成。
例如,常规语言类具有良好的闭包特性,并且给定了DFA 您可以在线性时间内测试单词是否属于L (A)。相反,使用图灵机,您需要线性时间来读取输出,这通常发生在实际开始处理之前。
简而言之,对于较小的类,您需要较少的计算能力来解决确定单词是否属于该语言的问题。
根据维基百科,乔姆斯基定义了上下文相关的语法(即类型1)来描述自然语言的语法。这与其他类别的语言有所不同,其他类别的语言是用来描述数学中使用的字符串系列(例如算术公式的语法)而不是自然语言(例如英语中语法正确的句子的语法)的。
在无上下文的语言中,在输入解析的任何时候,自动机都处于其堆栈所定义的状态。无论在何处使用输入,每个产品在使用输入时都具有相同的行为。
这导致了一个有趣的特性,即每个产品都生成由堆栈中较深的产品生成的产品的子语言,因此对于在任何特定输入上生成和消费的产品A和B的对,我们有三种可能的情况:
这意味着以下情况永远不会发生:
与此相反,在上下文相关的语言中,每个生产的行为取决于它的使用位置,因此生产中消耗的输入不是堆栈深处的输入的子语言(实际上,使用堆栈将无法正常工作)。而且我们有可能发生d。
在现实世界中,上下文敏感的语言有意义的情况就像用<b>粗体字</ b>,<i>斜体字</ i>和<u>带下划线的文本</ u>这些html标签并让它们重叠,例如“这是带有<i> mixed </ u>重叠标签</ i>的<u>文本”。观察一下以进行解析,并确定所有开始标签是否都与结束标签匹配,PDA不会这样做,因为它不是上下文无关的,但是LBA会很容易做到。
仅使用线性空间(所谓的线性有界自动机)的图灵机可以识别任何类型1的语言。