根据乔姆斯基层次结构,生成语言的某种类型语法的要求通常与可用于接受相同语言的合适机器结合在一起。当语法简单时,语言变得更复杂,因此我们需要更强大的机器来理解并接受语言。
例子:
Type 0 Grammar 很简单,它生成递归可枚举语言 (REL),它需要像“图灵机”这样的强大机器来接受所有字符串。
在这里,我们讨论了属于该层次结构的类似场景,即类型 2 语法;它生成下推自动机 (PDA) 接受的控制自由语言。
上图显示了一个输入磁带,它是有限自动机的工作方式,字符串被接受到磁带中,并且读取头根据有限控制单元提供的指令不断更新。另一方面,下推自动机是此磁带和堆栈数据结构的组合。
用于形成 PDA 的元组如下:
我们看到前四个元组 Q, , qo 和 F 与有限自动机的情况相似。
让我们来谈谈 ,现在我们知道下推自动机有一个堆栈机制来接受有限自动机中不可能的语言。问题出现在 Push 操作之前我们需要检查溢出条件,或者 Pop 操作之前我们检查下溢条件。
我们通过假设 Stack 是无限的来解决这个问题,而空的条件是通过预先引入一个元素来克服的在处理字符串之前进入堆栈。
这个假设在两个方面帮助我们:-
- 我们克服了下溢情况,从而节省了任何内存以保持对堆栈的检查为空。
- 初始堆栈符号可用于声明字符串处理已成功完成。
伽马符号 ( )用于表示所有的 Stack Alphabets。每个输入字母(相同或不同)可以用不同的堆栈符号表示。这也是必要的,因为它将堆栈的最顶部元素传送到机器。
Delta函数( )是转换函数,通过仔细查看在 Stack 上完成的三个主要操作,它的使用将变得更加清晰:-
- 推
- 流行音乐
- 跳过
1.推
推送操作如图所示完成。
转换按以下顺序进行:-输入,最顶层元素/最终列表
这里a是输入元素,被插入到栈中,从而使得最终的内容为aZo。
2.流行音乐
弹出操作如图所示完成。
转换按以下顺序进行:-输入元素、最上面的元素/移除确认
这里,a 是输入,c 是要删除的元素,删除确认由 Epsilon 符号显示,声明立即数已被弹出并且为空。
3.跳过
跳过操作如图所示完成。
转换按以下顺序进行:-输入元素、最顶层元素/最顶层元素
这里,a 是输入,此操作后堆栈保持不变。
因此,这结束了对下推自动机如何工作的详细研究。接下来,我们将介绍一些示例,以使工作和转换更加清晰。