形式言語について疑問に思っています。私は一種のパーサーを持っています:それは、xmlのようなシリアル化されたツリー構造を読み取り、それを多次元配列に変換します。
私のポイントは、使用されているアルゴリズムとさまざまな種類のオートマトン(ステートマシンチューリングマシンスタック...)の類似点です。
したがって、問題は次のとおりです。ここで暗黙的に使用するオートマトンはどれですか。また、どの形式言語ファミリに適合しますか?そして、再帰についてはどうですか?
「暗黙的に使用するオートマトン」とは、「同じ仕事をするための最小限のオートマトン」という意味です。
完全なソースは次のとおりです。
$words; // an array of XML tag '<tag>', '</tag>' and simple text content
$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
);
}