Computer science 如何构造与以下语法对应的NPDA?

Computer science 如何构造与以下语法对应的NPDA?,computer-science,automata,Computer Science,Automata,我想构造与下面语法对应的NPDA。 请告诉我建造的想法 S -> aABB|aAA A -> aBB|a B -> bBB|A 从CFG中获取NPDA的一般方法如下: 将语法G转换为乔姆斯基范式(CNF);将生成的语法称为“G” 使NPDA将G的开始符号s'推到堆栈上,并转换到第二个状态 在第二种状态下,有两种情况: 如果堆栈符号是G'中的非终结符,则不确定地为G'中的该非终结符选择一个产品,并用该产品的右侧替换该非终结符 如果堆栈符号是G'中的一个终端,则在NPDA中使用

我想构造与下面语法对应的NPDA。 请告诉我建造的想法

S -> aABB|aAA
A -> aBB|a
B -> bBB|A

从CFG中获取NPDA的一般方法如下:

  • 将语法G转换为乔姆斯基范式(CNF);将生成的语法称为“G”
  • 使NPDA将G的开始符号s'推到堆栈上,并转换到第二个状态
  • 在第二种状态下,有两种情况:
    • 如果堆栈符号是G'中的非终结符,则不确定地为G'中的该非终结符选择一个产品,并用该产品的右侧替换该非终结符
    • 如果堆栈符号是G'中的一个终端,则在NPDA中使用该终端符号,并将其从堆栈中弹出
  • 因此,我们的NPDA可能如下所示:

    states: q0, q1
    alphabet: a, b
    stack alphabet: Z, a, b, S, A, B
    start state: q0
    final state: q1
    transitions:
    
        (q0, e, Z) -> (q1, SZ)
        (q1, e, S) -> (q1, aABB)
        (q1, e, S) -> (q1, aAA)
        (q1, e, A) -> (q1, aBB)
        (q1, e, A) -> (q1, a)
        (q1, e, B) -> (q1, bBB)
        (q1, e, B) -> (q1, A)
        (q1, a, a) -> (q1, e)
        (q1, b, b) -> (q1, e)
    
    下面是处理字符串aaaa的执行跟踪:

    state: q0, stack: Z     , remaining input: aaaa
    state: q1, stack: SZ    , remaining input: aaaa
    state: q1, stack: aABBZ , remaining input: aaaa
    state: q1, stack: ABBZ  , remaining input: aaa
    state: q1, stack: aBBZ  , remaining input: aaa
    state: q1, stack: BBZ   , remaining input: aa
    state: q1, stack: ABZ   , remaining input: aa
    state: q1, stack: aBZ   , remaining input: aa
    state: q1, stack: BZ    , remaining input: a
    state: q1, stack: AZ    , remaining input: a
    state: q1, stack: aZ    , remaining input: a
    state: q1, stack: Z     , remaining input: e
    
    因此,字符串aaaa被接受,因为有一条路径通过NPDA接受