📅  最后修改于: 2020-11-26 10:20:06             🧑  作者: Mango
下推自动机是一种实现无上下文语法的方式,类似于我们为常规语法设计DFA的方式。 DFA可以记住有限数量的信息,而PDA可以记住无限数量的信息。
基本上下推式自动机是-
“有限状态机” +“堆栈”
下推式自动机具有三个组成部分-
堆栈头扫描堆栈的顶部符号。
堆栈执行两项操作-
推送-在顶部添加一个新符号。
弹出-顶部的符号被读取并删除。
PDA可能会或可能不会读取输入符号,但在每次转换时都必须读取堆栈的顶部。
PDA可以正式描述为7元组(Q,∑,S,δ,q 0 ,I,F)-
Q是有限状态数
∑是输入字母
S是堆栈符号
δ是转移函数:Q×(∑∪{ε})×S×Q×S *
Q 0是初始状态(Q 0∈Q)
I是初始堆栈顶部符号(I∈S)
F是一组接受状态(F∈Q)
下图显示了PDA从状态q 1到状态q 2的过渡,标记为a,b→c-
这意味着在状态q 1处,如果遇到输入字符串‘a’并且堆栈的顶部符号为‘b’ ,则弹出‘b’ ,将‘c’推入堆栈顶部并移至状态q 2 。
PDA的瞬时描述(ID)用三元组(q,w,s)表示,其中
q是状态
w是未消耗的输入
s是堆栈内容
“旋转门”符号用于连接代表PDA的一个或多个移动的ID对。过渡过程由旋转门符号“⊢”表示。
考虑一个PDA(Q,∑,S,δ,q 0 ,I,F)。过渡可以用以下旋转符号数学表示-
(p, aw, Tβ) ⊢ (q, w, αb)
这意味着当从状态p转换到状态q时,输入符号‘a’被消耗,堆栈‘T’的顶部被新的字符串‘α’代替。
注-如果我们希望PDA零次或多次移动,则必须使用符号(⊢*)。