コンテキストフリーグラマー対通常の文法:故障
両方のコンテキストフリーグラマー(CFG) および通常の文法(RG) 言語を定義するために使用される正式な文法ですが、の力が異なります および複雑さ 。
主な違いの内訳は次のとおりです。
1。生産ルール:
* cfg: CFGの生産ルールには、 a→βのフォームがあります 、ここで、Aは単一の非末端記号で、βは一連の端子および/または非末端シンボルです。
*例:S→ASB | ε(sは非末端、a、bは端子、εは空の文字列です)
* rg: RGSの生産ルールはより制限されています:
* 右線形: A→WBまたはA→Wでは、AとBは非末端であり、Wは一連の端子です。
* 左線形: A→BAまたはA→Wでは、AとBは非末端であり、Wは一連の端子です。
2。複雑さの解析:
* cfg: CFGSの解析は、プッシュダウンオートマトン(PDA)を使用して実行できます 、非ターミナルを追跡するスタックがあります。
* rg: RGSは、有限状態オートマトン(FSA)を使用して解析できます 、スタックがない。
3。言語の複雑さ:
* cfg: CFGは、RGSよりも幅広い言語を生成できます。 ネストされた構造を持つ言語を説明できます 、バランスの取れた括弧のように、通常の文法で表現できません。
* rg: RGSは通常の言語のみを記述できます シンボルの固定パターンを備えた文字列のように、有限の数の状態と遷移を備えています。
4。例:
* cfg: バランスの取れた括弧の言語(例: "((((((()))))")はコンテキストがありませんが、規則的ではありません。
* rg: 偶数の「a」(例えば、「aa」、「aba」、「aaaaa」)を持つすべての文字列の言語は規則的です。
5。概要:
|機能|コンテキストフリーグラマー|通常の文法|
| --- | --- | --- |
|生産ルール| A→β| A→WBまたはA→W(右/左線形)|
|複雑さを解析する|プッシュダウンオートマトン|有限状態オートマトン|
|言語の複雑さ|より強力で、ネストされた構造を説明できます|それほど強力で、通常の言語に制限されています|
簡単に言えば:
* 通常の文法は、ビルディングブロックのようなものです :それらは単純なパターンのみを作成することができます。
* コンテキストのない文法は、LEGO のようなものです :より複雑でネストされた構造を構築できます。
アプリケーション:
* cfgs: プログラミング言語を解析するためのコンパイラで、構文を分析するための自然言語処理、および正式な検証で使用されます。
* rg: テキストエディターでは、正規表現マッチングのために使用され、プロトコル解析のネットワーク、および単純なシステムのモデリングのオートマトン理論で使用されます。
