4

あいまいな Marpa 文法とあいまいな入力文字列があるとします。

Marpa を使用して文字列を解析し、解析フォレストを作成できます。フォレスト内の各解析ツリーを反復処理することもできます。

しかし、パース フォレストに沿って反復処理するにはどうすればよいでしょうか。

私が何を意味するかを説明するには:

解析フォレストは一種のグラフであり、代替が分割されるノードと、代替が結合して「メイン ストリーム」になるノードを持つことができます。

これらが 1 つのパース フォレストの代替パース ツリーであるとします。

  • A B1 C
  • A B2 C
  • A B3 B4 C

本流はあるがA……CあいまいなB部分がある。

もちろん、実際の解析では、分岐時に多くのレベルの分岐が存在する可能性があり、単一のメイン ストリームに再結合しないストリームが存在する場合があります。しかし、一般的には、2 つまたは多くの解釈に共通する多くの部分があります。

明確で曖昧なノードのチェーンに沿って反復するには、どのようなアプローチを使用できますか?

実際、グラフ全体を出力できますか?

4

2 に答える 2

3

この要点は、ASF ノードを反復処理してシリアル化された AST のリストを生成する 2 つの例 (基本と高度) を示しています。

どちらも Marpa::R2 テスト スイート (cpan/t/sl_panda(1).t) のコードに基づいています。

それが役に立てば幸い。

PS この要点はおそらくより役立つでしょう — すべての ASF ノードを訪問順に出力します — 使用できます

$spans->{ $literal }->{ $start }

ハッシュして、ノードがあいまいであるかどうかを確認し、スパン間隔 ($start、$start + $length) に基づいてそこからグラフを作成し、子/親リンクを作成します。

于 2014-09-18T03:45:37.997 に答える
1

これを行うためのインターフェイスは、Marpa::R2 でアルファ版から安定版になったばかりなので、質問のタイミングは適切です。https://metacpan.org/pod/distribution/Marpa-R2/pod/ASF.podhttps://metacpan.org/pod/distribution/Marpa-R2/pod/Glade.podを見てください。

グラフ全体を出力できますか?はい、しかしそれは提供するのが簡単なことです。難しいのは、指数関数的にならずに、関心のある部分にドリルダウンするための優れた方法を考え出すことでした。

ところで、別の Marpa エキスパートがここで声をかけてくれるかもしれません。この時点で、私のインターフェースを使った経験が私よりも多い人です。おそらく、あなたは彼の答えを少し待ちたいと思うでしょう。:-)

于 2014-09-18T02:27:25.110 に答える