質問

私は正式な言語について疑問に思っています。私は一種のパーサーを持っています:それはàxmlのようなシリアル化されたツリー構造を読み取り、それを多桁のアレイに変換します。

私のポイントは、使用されているアルゴリズムと異なる種類のオートマトン(ステートマシンのチューリングマシンスタック...)の類似点です。

質問は、ここで暗黙のうちに使用しているオートマトンはどれですか?そして、再帰はどうですか?

「オートマトンは暗黙的に使用する」という意味です。「同じジョブを行うための最小限のオートマトンです」です。

これが完全なソースです:

$ words; // XMLタグの配列 'u003Ctag> '、'u003C/tag> 'そしてシンプルなテキストコンテンツ

$ tree = array( 'type' => 'root'、 'sub' => array());

$ ptree = array(&$ tree);

$ deep = 0;

foreach($ words as $ elem){

if ( preg_match($openTag, $elem) ) { // $elem is an open tag

    $pTree[$deep++]['sub'][] = array( // we add an element to the multidim array
        'type' => 'block',
        'content' => $elem,
        'sub' => array()
    );

    $size = sizeof($pTree[$deep - 1]['sub']);
    $pTree[$deep] = &$pTree[$deep - 1]['sub'][$size - 1]; // down one level in the tree

} elseif ( preg_match($closeTag, $elem) ) { // it is a close tag

    $deep--; // up in the tree 

} else { // simple element

    $pTree[$deep]['sub'][] = array(
        'type' => 'simple',
        'content' => $elem
    );

}

}

役に立ちましたか?

解決

もう一度質問を見てください。あなたはaを参照しています $words 変数、これはあなたの例にはありません。また、コードはありません。何が行われているのか分からないと、あなたに答えるのは難しいです。

変数の名前から判断します $deep, 、おそらく国家ではありません。オートマトンの状態は、オートマトンに固有のセットの要素です。 $deep 深さ、正の整数が含まれているように見えます。繰り返しますが、コードなしでは伝えるのは難しいです。

とにかく、あなたはおそらく、コードを実装として設計しなかった場合、「暗黙的にオートマトンをまったく使用していません」。

あなたのシンプルなXMLのようなファイルは、おそらく決定論的なスタックマシンによって認識されるか、決定論的なコンテキストフリーの文法によって生成され、チョムスキー階層のタイプ-2になります。繰り返しになりますが、これは単なる推測であり、「XMLのようなシリアル化されたツリー構造」は、あらゆる種類の形式ではあいまいです。

要するに、正式な理論を使用しようとしている場合は、質問をより正式に語ってください。


編集(コードを確認した後):

あなたは木を作っています。これは、オートマトン(少なくとも「標準」のもの)の手の届かないところにあります。有限オートマトンは入力と状態でのみ動作し、スタックマシンがスタックを追加し、チューリングマシンには両方向に移動できる読み取りワイトテープがあります。

オートマトンの「出力」は、単純な「はい」(受け入れられている)または「いいえ」(受け入れられていない、または無限のループ)です。 (チューリングマシンを定義して、テープでより多くの出力を提供することができます。)「同じジョブを行うための最小限のオートマトンです」に答えることができる最善のことは、スタックマシンで言語を受け入れることができることです。しかし、それは非常に異なって機能し、木を与えません。

ただし、調べることができます 文法 - の概念を紹介する別の正式な言語構成 解析ツリー。ここでやっていることは、トップダウンパーサーを備えたそのような解析ツリーを作成することです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top