2012-03-30 6 views
-1

これを行う方法がわかりません。この操作を実行する方法については、オンライン上のリソースがありません。[注釈] EBNFアノテーション付きのプロダクションルールこれは2つの正規表現の違いで、これを(na | f?)lex文法仕様ルールに変換します[。]問題は、これを正常に行う方法がないことです。[3]このあなたは文脈自由文法に交代で空の一致を使用することができる方法のように、クリーネ代数を使用して[?][af]?lex正規表現の違い

答えて

1

何をEBNFの生成規則がどのように見えるん(とあなたがEBNFでいることを書くことができますか?)

正規表現間の設定差A\Bは等価ですnと補数との交差点:A&~B:Aと一致する文字列の集合。Bと一致する文字列がない。flexやalexは、正規表現言語でそのようなセマンティクスをサポートしない。

この形式の式は、依然として規則的な言語を表しているため、オルタネーションとKleene演算子のみに基づいて正規表現が存在する同等のオートマトンがあります。この等価な表現は見つけられず、AとBの特定の内部構造に依存します。つまり、AとBを一般的な正規表現の式に差し込んで、結果が集合の差を表すようにすることはできません。元のAとBは集合差正規表現には現れません。

+0

です。これまでの情報をお寄せいただきありがとうございます。なぜなら、このようないくつかのルールのために、Visual Basicで提供されている文法を実際には使用できない理由を理解することは非常に役に立ちます。 XMLProcessingValue :: = < "?>" 書かれたEBNFルールは次のようになりしない限り...> を文字列が含まれている: "?>" XMLProcessingValue :: = XMLString \ がいることは正しいですか?私はまだ公式言語の仕組みにはまったく新しいです。 – user1303374

+0

EBNFは、正式に定義された文法記述言語です(Wikipediaで参照してください)。それは設定差のための演算子を持っていません。文法の著者たちは、標準的なEBNFで表現できないものについて、非公式の英語をいくつか挿入しました。 – Kaz

+0

'ab'のような有向グラフを除外するために、補集合演算子や交差演算子を使わずに正規表現を使う方法があります。つまり、(a * | [^ a] * |([^ a] *(a [^ b]))*)[^ b] * 'のようなものです。すなわち、 'a'または非' a'のすべての文字列、または 'a'と' b'で終わらない非 'a'の0個以上のセグメントに一致し、 0以上の非 'b'の並びによって追跡されるこれらのすべての可能性の和 – Kaz