は“ regex”現代のプログラミング言語では本当に“文脈依存文法&#8221 ;?
-
03-07-2019 - |
質問
長年にわたり、「正規表現」パターンマッチングは、私が疑問に思うほどに強力になってきています。それは本当に文脈依存の文法マッチングですか?文脈自由文法マッチングのバリエーション/拡張ですか?それは今どこにあり、なぜ古い、制限のある「正規表現」の代わりにそれを呼び出すのですか?
他のヒント
見方:
- 通常の言語:
- ステートマシンによって一致。現在の変数を表すために使用できる変数は1つだけです "場所"一致する文法で:再帰を実装できません
- コンテキストフリー言語:
- スタックマシンによって照合されます。現在の「場所」文法では、いずれかの形式のスタックで表されます。 「記憶」できません以前に発生したもの
- 状況依存言語:
- ほとんどのプログラミング言語
-
すべてほとんどの人間の言語
正規表現パーサーを知っているので、パーサーが既に遭遇したものと照合して、コンテキスト依存の文法のようなものを実現できます。
さらに、正規表現パーサーは、洗練されていても、ルールの再帰的な適用を許可しません。これは、文脈自由文法の明確な要件です。
正規表現という用語は、私の意見では、主にそれらの通常の文法(星と疑問符)を表現するために使用される構文を指します。
古典的な正規表現のルールを破る現代の正規表現の実装には機能があります定義。
たとえば、 Microsoft&#8217; s .NET Balancing Group < code>(?&lt; name1
-
name2
&gt;&#8230;)
:
^(?:0(?<L>)|1(?<-L>))*(?(L)(?!))$
これは言語 L &#8320;&#8321;に一致します = {&#949; 、01、0011、000111、&#8230; }。しかし、この言語はポンピング補題によれば規則的ではありません。
所属していません StackOverflow