正規表現はですか?


16

Type 3 Grammarがある場合、プッシュダウンオートマトンで(スタックで操作を行わずに)表現できるため、コンテキストフリー言語を使用して正規表現を表現できます。しかし、解析テーブルを構築せずに、タイプ3の文法が、LL(1)SLR(1)などであるかどうかを知ることはできますか?LR(1)LL(1)SLR(1)

回答:


15

すべての通常言語にはLL(1)文法があります。このような文法を取得するには、通常の言語のDFAを取得し(おそらく、正規表現から取得したNFAのサブセット構築を行うことにより)、それを右再帰的な正規の文法に変換します。この文法はLL(1)になります。これは、同じ非終端記号の生成のペアが異なるシンボルで始まるか、εを生成し、先読みトークンとして$を持っているためです。したがって、LL(1)の文法はすべてLR(1)であるため、すべての通常言語もLR(1)です。さらに、このペーパーの重要な結果を使用すると、LR(1)言語にはSLR(1)文法があり、通常の言語にはSLR(1)文法があることがわかります。

ただし、通常の言語はすべてLR(0)ではありません。LR(0)言語には非常に固有のプロパティがあります。特に、プレフィックスのないものでなければなりません。したがって、正規言語{a、aa}はLR(0)ではありませんが、明らかに規則的です(regex a |(aa))。ただし、LR(0)言語は通常の言語に適切に含まれていません。{0 n 21 n | n≥1}はLR(0)ですが、言語は規則的ではありません。

S -> E
E -> 0E1 | 2

お役に立てれば!


2
正則文法が通常の言語のセットを正確に受け入れるという事実は、通常、クラス(または演習)で行われるので、答えははるかに迅速です。
ラファエル

2

(プレーン)正規表現の構文(「表現」と言いました)はLR(0)です。正規表現を表す文字列を解析するために先読みする必要はありません。正規表現の文法でパーサージェネレーターを実行することで、これを簡単に決定できます。-}正規表現用の単純な再帰降下(LL(0))パーサーを簡単にコーディングすることもできます。LL(0)であるものはすべてLR(0)です。

Perlのようなもっと複雑ないわゆる「正規表現」の構文がこのようなものかどうかはわかりません。しかし、Perlの正規表現は正規表現よりも厳密に強力であるため、単純な古い正規表現ではありません。

文法に何らかのプロパティがあるかどうかを判断するには、何らかの述語を実行する必要があります。(S)LR(k)であるかどうかを判断するには、そのプロパティをチェックできる述語を実行する必要があります。実際には、そのような述語は、それらが定義されている方法のために、実際に解析テーブルを構築する必要があります。


Perl正規表現はNFAで動作します

問題は、Perl正規表現がどのように機能するかではありませんでした。(Perl?)正規表現が特定のテクノロジーによって解析可能であるかどうかについてでした。Perlの正規表現はNFAを使用してマッチングを行い、他のコンテキスト依存データキャプチャを使用すると考えられますが、質問との関連性はわかりません。

3
-1正規表現はLR(0)ではありません。LR(0)言語は接頭辞フリーでなければなりませんが、正規表現a|(aa)は接頭辞フリーではない言語を記述します。さらに、LR(0)言語はイプシロンプロダクションで文法を処理できないため、通常の言語{epsilon、a}はLR(0)ではありません。ただし、通常の言語 LL(1)です。これは、通常の文法として記述できるため、すべてLR(1)であるためです。LR(1)言語にはSLR(1)文法があるため、これはすべての標準言語がSLR(1)であることを意味します。
templatetypedef

1
LL(0)に関しては、その逆です:LL(0)言語は通常の言語の適切なサブセットです。LL(0)は、異なる派生を決定するために先読みを使用しないことを意味することに注意してください。これは基本的に決定がなく、言語が単一の単語で構成されていることを意味します。LR(0)は、対照的に、有用なクラスです-ここでも、先読みを使用して決定しません(ここでは削減のため)が、シフトにより異なる制作を区別できるため、まだある程度の多様性があります。

1
@ IraBaxter-正規表現は接頭辞フリーではないため、正規表現の構文もLR(0)ではありません。LL(0)言語には単一の文字列のみを含めることができる(または文字列を含めない)ため、これらもLL(0)ではありません。
templatetypedef
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.