2009-02-27 19 views
2

文字列ではない逐次データの正規表現のようなものがあるのだろうかと思っていました。非文字列の正規表現

私は、正規表現は基本的にDFAに沸騰することを知っていますが、私はこれらのDFAを指定するためのより高いレベルの言語にもっと興味があります。

答えて

3

正規表現の理論には、文字列以外のものに適用されないということは絶対にありません。ほとんどの正規表現エンジンの実装では、それが許されません。あなたは、非エンコード8ビットのデータとして文字列を扱うことを可能にする正規表現エンジンを持っている場合

しかし、その後、あなたはバイト指向のバイナリを解析するためにそのエンジンを使用することができます(時々BINARY8BITまたはASCII-8BITと呼ばれます)データ。

Ragelは、バイナリプロトコルを解析するために特別に設計されたステートマシンコンパイラです。 Ragelは現在、C、C++、Objective-C、D、Java、Rubyをサポートしています。あなたのステートマシンを高レベル(正規表現のような)DSLに書き込むと、Ragelはターゲット言語にコンパイルします。

ほとんどの関数型プログラミング言語は、強力なパターンマッチング機能を備えています。これらの機能を使用してマッチバイナリデータをパターン化することができます。これの一例はErlangのbuilding and pattern matching binary data structuresのサポートです。

OMetaは、基本的には正規表現のスーパーセットであるパターンマッチングとパターン変換言語です(ステロイド上)。文字列だけでなく、配列や整数や任意のオブジェクトのリストのマッチングもサポートしています。

3

文法は、単なる文字列よりも複雑なものの正規表現の形式であると主張できます。原則として、文字以外のトークンでも正規表現を考案できます。 1つの選択肢として、Unicodeの正規表現はそのような生き物であると主張することができます。古典正規表現と同じように、単純なバイトにはマッチしません。

3

「原子」が文字でなくても、通常のコンテキストパーサージェネレータ(Yacc/Bisonなど)を使用して、通常の言語パーサを生成できます。スキャナ機能にフックすることで、文字列かどうかにかかわらず、文法を「何でも」解析することができます。

ロジックの領域には、LTLやCTLなどの「時間的論理」があります。これらは、基本的に「イベント」の正規表現のサブセットです。 LTLの論理式は、通常、有限状態オートマトンに変換されます。

+0

LTLとCTLを定義できますか? –

+0

LTL =線形時間論理およびCTL =計算ツリー論理。あなたはウィキペディアからそれらの両方を見つけることができます(簡略化されていない用語を検索する)。 –