回答:
正規表現、正規文法、および有限オートマトンは、同じものに対する3つの異なる形式です。それらのいずれかから他に変換するアルゴリズムがあります。
3つすべてを持っている基本的な理由は、それらが独立して作成され、Kleeneによって証明された同値の最初のセット(他にもいくつかの形式があります)です(この結果、またはその一部はKleeneの定理と呼ばれます)。
したがって、そのコンテキストでは、モデルを実行する方法に応じて、すべて通常の言語の文字列を認識または生成します。数学的には、その意味で違いはありません。
もちろん、形式の詳細のために、特定のタスクに対して1つのモデルが別のモデルよりも使いやすい場合があります。さらに、人間の頭の中でのそれらの働き方は、コンピューターのような有限オートマトンの「感じ」、小さな部分文字列からストリングを構築しているように正規表現の「感じ」、より伝統的な文法のような「感じ」がしばしば異なる言語の文の派生または分類(当然ながら歴史を見ると)。
2つを比較するために、それらを定義しましょう:
正規表現
そのため、正規表現は次のように再帰的に定義されます。
いくつかのセマンティクス(つまり、演算子を解釈して文字列を取得する方法)とともに、通常の言語から文字列を生成する方法を取得します。
通常の文法
正規文法は、4つのタプルから成りNは、非端末の集合であり、Σは、端末の集合であり、Sは開始非終端記号であり、Pは、そのプロダクションの集合であります開始記号を段階的にΣ ∗の文字列に変更する方法を教えてください。Pは、2つのタイプのいずれか(両方ではない)からプロダクションを引き出すことができます。
右線形文法
非端末、C、端末aおよび空の文字列εの場合、すべての規則は次の形式になります。
左線形文法
左線形文法は同じですが、ルール#2はです。
熟考すること
したがって、これらの定義を見て、それらを試してみると、正規表現が一致ルールのように見えるか、文字列を少しずつ処理する方法に見えることがわかります。
文法は文字列のセクションを「ラベル付け」し、新しいラベルの下にラベルをグループ化して文字列を検証するように見えます(つまり、から文字列へ、またはその逆に到達できれば幸いです)。
ただし、これらは実際に同じ基本的なことを行っており、それらの機能のメタファーをどのように表示するかは、本当にあなた次第です。