EPALを認識する非一般的なCFG解析アルゴリズムはありますか?


23

EPALはパリンドロームの言語でもあり、次の明確なコンテキストフリーの文法によって生成される言語として定義されています。

Saa

Sbb

SaSa

SbSb

EPALは、多くの解析アルゴリズムの「悩みの種」です。言語を記述する文法を解析できる明確なCFGの解析アルゴリズムにはまだ出会っていません。特定のパーサーでは解析できない明確なCFGがあることを示すためによく使用されます。これは私の質問に影響を与えました:

EPALで動作する明確なCFGのみを受け入れる解析アルゴリズムはありますか?

もちろん、言語を線形時間で解析するグラマー用のアドホック2パスパーサーを設計できます。EPALを念頭に置いて特別に設計されていない解析メソッドに興味があります。


1
私は尋ねることをほとんど恐れています:再帰降下によるLL(1)の何が問題になっていますか?
ラファエル

3
言語はどのkに対してもLL(k)ではないため、非バックトラッキングの再帰降下はEPALを処理できません。バックトラッキングを使用した再帰降下は、O(n2)時間で文法を処理できますが、これは指数関数的な最悪の場合の動作を伴う一般的なアルゴリズムであり、私が探しているものではありません。
アレックス10ブリンク

O(N2)O(2N)

1
@Victor:バックトラッキングは、特定の文法ではなく、一部の文法で指数関数的な動作をします。それでも、それはあいまいな文法で機能するアルゴリズムであるため、私の質問への答えとしてそれを割引きます。
アレックス10ブリンク

1
@jmad:私の意図は言語を解析することではなく(線形時間で簡単にできます)、むしろ私の好奇心を満たすためです:解析メソッドで解析できない言語の例として使用されているのを見てきました何回も認識している解析メソッドがあるかどうか興味があります。
アレックス10ブリンク

回答:


14

自己の責任において、解析戦略の次のスケッチを検討してください。

A()wvAwBvB()

AwBvAwBvwpwvsvΘ(n2)

この考え方は、非線形文法にはまったく機能しません。線形であるがあいまいな文法は、一般的にバックトラッキングなしで解析できません(少なくとも負の入力の場合)。


  1. wpvは、ここでおよび意味します。つまり、どちらの単語も他方の接頭辞ではありません。は接尾辞についても同様です。wvvws

1
優れた!まさに私が探していたもの。どのようなに対してもではない言語が、このような単純なアルゴリズムで解析できることは素晴らしいことです。NLR(k)k
アレックス10ブリンク

1
これについてもう少し考えた後、私はあなたの説明に小さな誤りを発見しました:線形文法は明確ですが、説明するような一意のプレフィックスはありません。まだ一意のプレフィックスがありますが、それを取得するために非端末の内部を見る必要があり、実行時間はます。ただし、アルゴリズムはます。SaAb|aBb,Aa,BbO(n2)EPAL
アレックス10ブリンク

@AlextenBrink良いキャッチ。これを考慮して編集しました。
ラファエル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.