私は、RubyおよびPerlプログラマーが正規表現を使用していくつかの 複雑なコードの課題 完全に実行することを確認しました。Perl正規表現の lookaheadおよびlookbehind 機能により、他のほとんどの言語での正規表現の実装よりも強力です。
Perl正規表現が Turing complete であることを証明または反証する簡単な方法はありますか?
?{ }
などのあらゆる種類の埋め込みコードを除外すると、それらはおそらくコンテキストフリーのすべてをカバーしているわけではなく、チューリングマシンははるかに少ないです。彼らはかもしれないが、私の知る限り、実際にそれを証明した人はいない。人々がPerl正規表現を使用して一定のコンテキストフリーの問題をしばらく解決しようとしていて、まだ解決策を考え出していないことを考えると、コンテキストフリーではない可能性があります。
どの機能が単に便利で、実際にパワーを追加するかについて興味深い議論があります。たとえば、0に一致ん* 1 * 0ん (これは、「任意の数のゼロ、その後に1が続き、前と同じ数のゼロが続く」という表記です)は、純粋な正規表現で実行できるものではありません。これは、Pumping Lemmaを使用した正規表現では実行できないことを証明できますが、単純で非公式な証明は、正規表現が任意の数のゼロを数える必要があり、正規表現は数えられないことです。
ただし、後方参照は以下と一致できます。
/(0*) 1 \1/x;
つまり、後方参照はより強力な機能を提供し、単なる利便性ではありません。他に何が私たちにもっと力を与えるかもしれませんか?
また、Perl6の「パターン」(正規表現であるかのように見せかけることすらありません)は、Perl5の正規表現に似ているように設計されています(したがって、多くを再学習する必要はありません)。自由。それらは実際に設計されているので、それらを使用して、語彙スコープ内で言語を解析する方法を変更できます。
少なくとも2つの議論があります: 完全性と正規表現のチューリング および Perlパターンは普遍的ですか? さらなる参照があります。
(私の訓練されていない目に対する)コンセンサスは、答えは「いいえ」であるようですが、私がすべてを正しく理解しているかどうかはわかりません。