ほとんどのREGEX実装はどこで複雑さのスケールに分類されますか?


19

perlや.NETなどの正規表現の最新の実装は、lookaheadやlookbehindなどの機能を備えたREGEXの古典的なコンピューターサイエンスの定義を超えています。これらの機能により、有限の非プッシュダウンオートマトンでは記述できないステートメントを解析できますか?可能な場合、チューリング完了にどれだけ近いのでしょうか?


2
密接に関連した質問:「後方参照を伴う正規表現」と「任意のプログラムコードを含むことができる正規表現」の間に興味深いものはありますか?たとえば、後方参照と先読み/後読みのある正規表現は、後方参照/後読みのない正規表現よりも厳密に表現力がありますか?Perlの「特別なバックトラッキング制御動詞」はどうですか?
ユッカスオメラ

関連する(そしておそらく間違っている):stackoverflow.com/questions/2974210/…–
Aryabhata

回答:


18

本当の問題は、無制限の意味の問題だとは思いません。これは、解析における他のどの状況よりも悪いことではありません。

問題は後方参照を特徴付けることにあります。後方参照は非常に強力で非常に制限されています:いくつかの文脈自由言語を許可せずに、いくつかの非文脈自由言語の記述を許可します。たとえば、正規表現は、(a*)b\1b\1フォームの文字列に一致するNB NB nは、あなたが、これは文脈自由言語ではありませんを示すために、ポンピング補題を使用することができます。ただし、一方で、後方参照を持つ正規表現は、バランスのとれた括弧言語(コンテキストなしのプロトタイプ言語)に一致するのに十分ではないようです。anbanban

正規表現に言語の文字列が何であるかを示す意味論を与えるのは簡単ですが、優れたオートマトン理論的特性を与えることははるかに難しいようです。それはレジスタマシンのようなもので、そのレジスタに入力の部分文字列をコピーでき、現在の文字列をテストするために使用できますが、これらのレジスタを変更する機能がありません。

有限モデル理論を行っている人々には、ファンキーな機械モデルがたくさんあり、これが彼らのモデルのいずれかに対応するかどうかを知ることは興味深いでしょう。


9

/(.*)\1/L={ww|wΣ}wKLK={ww|wΣ,w∣≤K}K

ただし、原則として、指定された正規表現は通常の言語よりも強力です。この関連する質問では、さらに詳細に(同様に気の利いた例で)説明しています。


{ww | w∈Σ∗、∣w∣≤K}はCSLまたはTMとして認識できませんか??
dhruvbird

ああ ww ^ Rを行う必要がありました。修正します。ありがとう
Suresh Venkat

実際、これについて質問がありました。wwはCSLですか、それとも認識可能ですか?私は(まだ)LBAを思い付くことができなかったので、ただ不思議に思っています
...-dhruvbird

1
{ww:wΣ}

5

Suresh Venkatによってリンクされているこの別の質問から得られた興味深い結果の1つは、「実用的な」正規表現がNP完全であり、したがって、SATと同等のパワーであることです。

専門家ではないので、直感的には「後方参照を含む正規表現は、バランスのとれた括弧言語に一致するのに十分ではないようだ」と同意しますが、奇妙なことが起こっています。NP完全性とは、NP問題を多項式で正規表現に簡約できることを意味するため、おそらく「平衡括弧」言語から正規表現で認識可能なものに多項式簡約するだけです。ただし、CFLを解析するための不条理な正規表現が存在する可能性があります。非素単項数も解析できるためです。

おそらく、教訓は、一般的に複雑度クラスと言語クラスは比較できないということです。また、「複雑さの尺度」ではなく、チョムスキーの階層を参照するように質問を言い換えることをお勧めします(公平であっても、それで混乱しなかったとしても)。

チャールズ・スチュワートはこう書いている:

Aho、1990、「文字列内のパターンを見つけるためのアルゴリズム」は、バックトラッキングを使用した通常の言語のメンバーシップの問題がNP完全であることを示しています。

部分的なプレビュー(少なくとも声明)は、Googleブックスの 289ページにあります。また、論文への書誌参照はここにあります。ペーパーでは、rewbrはBackReferencesを使用した正規表現の略であることに注意してください。


3

「正規表現」の最も一般的な実装であるPCREは、後方参照を超える再帰パターンも実装します。Stackoverflowで、それらの複雑さに関する質問が寄せられました。Perlの第一人者brian d foyによる実践的な詳細な回答によれば、これによりPCREはコンテキストフリーの文法と同じくらい強力になります。ただし、Backus-Naur Formと比較すると構文はひどいです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.