任意の空スタック受理式非決定性プッシュダウンオートマトンから、それに等価な文脈自由文法を得る方法がわかりにくいので、わかりやすく説明します。
前提の再確認
まず、今話したオートマトンは以下で定式化されます。
M=(Q,\Gamma ,\Sigma , \delta, q_0,Z_0,\phi)
このオートマトンは、有限オートマトンに比べて、タプルの中の文字が二つ増えています。そちらを見てみましょう。
右端のφの位置は最終状態の集合が入る場所ですが、今回は最終状態が空なので空集合になっています。(空スタック、と対応。つまり、εで受理されるということ。) また、$\Gamma$はスタック記号の集合です。
どちらも、プッシュダウンオートマトン独自の概念ですので、この点がわからなければ、教科書でその定義を確認してください
作成する非終端記号の形式が独特
さて、開始記号$S$以外に、どのような非終端記号を定めたら良いでしょうか。
今回のケースは、通常のオートマトンから文法への変換とは異なります。
それは、今回のプッシュダウンオートマトンでは、状態とスタック記号のペアを常に念頭におくという方針になっているからです。そのようなペアはモード$(p,A)$などと呼ばれることがありますね。 なお、ここでは、$p\in Q, A\in\Gamma $です。
さて、本題に入ります。S以外の非終端記号の定め方は以下です。
$(p,A)$から推移を繰り返して$(q,\epsilon)$となる、すなわち、空スタック受理となる場合を考慮して、以下のような非終端記号を定めます。
[p,A,q] (p,q\in Q, A\in \Gamma, x\in\Sigma ^*)
この表記は$(p,Q)$, $(q,\epsilon )$のペアから$[p,A,q,\epsilon]$のような非終端記号を定めてもいいけど、εはいちいちかくのがめんどいので省略した、という理解で覚えてください。(あくまで覚え方です。)
具体的な非終端記号の作成及び生成規則の作成
(I)初期のスタック記号と、初期状態に関する作業
(I) すべての$r(\in Q)$に対して、以下の生成規則を作る。
S\rightarrow [q_0,Z_0, r]
これは数式そのままなのでわかりやすいです。
(II) 状態推移関数の各結果に基づいた作業
ここが抽象的でわかりづらいと感じました。まず、教科書からの抽象的な定義を引用します。
/////引用/////
$\delta(p,a,A)\ni(q_1,B_1B_2...B_n)$ $(a\in\Sigma \cup {\epsilon}, B_i \in \Gamma)$である時、すべてのあらゆる可能な重複を許した組み合わせの$q_2,q_3,...,q_{n+!}$に対して、生成規則
[p,A,q_{n+1}\rightarrow a[q_1,B_1,q_2][q_2,B_2,q_3]...[q_n,B_n,q_{n+1}]
を作る。特に、$\delta(p,a,A)\ni(q_1,\epsilon)$である時には、生成規則
[p,A,q_1]\rightarrow a
を作る。
/////引用ここまで//////
後半はそのままなのでわかりますが、前半の「すべてのあらゆる可能な重複を許した組み合わせの....(大量の数式)」のくだりで、脱落します。
わかりやすく説明すると、
私「これから一つ一つ、順番に状態推移関数を見ていきましょう」
私「状態推移関数が返す結果で、スタック記号はεですか?つまり、空受理になってますか?」
状態推移関数が返すスタック記号がεの場合
私「ラッキーですね。入力aをそのまま矢印の向こう側に書いて一つの生成規則が完成です。」
推移関数のスタック記号が1つだけあった場合
私「それでは、状態推移関数が返すスタック記号は何個ありますか?」
\delta(p,a,A)={(p,A)}
私「なるほど、一つですね。状態は全てを挙げると$p,q$なので、それらから1つずつ重複を許して選んだら$q_2=p$または$q_2=q$が得られますね。これが、さっきの複雑な定義式にあった組み合わせのことです。」
私「今回は、一つしか選べないので、簡単ですね。後は数式通りにやってください。」
そうでなかった場合(推移関数のスタック記号が2つの場合)
私「それでは、状態推移関数が返すスタック記号は何個ありますか?」
\delta(p,a,A)={(p,AB)}
私「なるほど、2つですね。状態は全てを挙げると$p,q$なので、それらから2つずつ重複を許して選んだら$(q_2,q_3)=(p,p)$ $(q_2,q_3)=(p,q)$ $(q_2,q_3)=(q,p)$ $(q_2,q_3)=(q,q)$が得られますね。この全てについて先程のごちゃごちゃした生成規則の式にぶちこんで、4つの生成規則を作ってください」
ということで、まずは状態推移関数が返すスタック記号はεなのか確認。もしそうならラッキー!そうでなくても、状態推移関数が返すスタック記号の数に着目して、$p_i$を順序を考慮して埋めていってください。
以上、お読みいただきありがとうございました。明後日テストなので、寝ます。
参考
オートマトン・言語理論 森北出版