web-dev-qa-db-ja.com

通常の文法と文脈自由文法

コンピューティング言語テストのために勉強していますが、頭を包み込むのに問題があるという考えが1つあります。

通常の文法はより単純で、あいまいさを含むことはできませんが、プログラミング言語に必要な多くのタスクを実行できないことを理解しました。 context-free grammarsはあいまいさを許しますが、プログラミング言語(パリンドロームなど)に必要ないくつかのことを許します。

私が問題を抱えているのは、regular grammar nonterminalsが端末または端末に続く非端末にマッピングできること、またはコンテキストフリーの非端末がマッピングできることを知って、上記のすべてを導き出す方法を理解することです端末と非端末の任意の組み合わせ。

誰かがこのすべてをまとめるのを手伝ってもらえますか?

89
Jason Baker

通常の文法は右線形または左線形のいずれかですが、文脈自由文法は基本的に端末と非端末の任意の組み合わせです。したがって、通常の文法は文脈自由文法のサブセットであることがわかります。

たとえば、回文の場合、形式は

S->ABA
A->something
B->something

パリンドロームは、右または左のいずれかの線形である必要があるため、通常の文法では表現できず、そのため、両側に非終端記号を含めることはできないことがはっきりとわかります。

通常の文法は曖昧ではないため、特定の非終端記号には1つの生成規則しかありませんが、文脈自由文法の場合には複数の生成規則が存在する可能性があります。

68
Sujoy

あなたが考えたいのは、さまざまなポンピングの補題だと思います。通常の言語は、有限オートマトンによって認識できます。文脈自由言語にはスタックが必要であり、文脈依存言語には2つのスタックが必要です(これは、完全なチューリングマシンが必要であると言うことに相当します)。

したがって、 通常の言語の見出し語 について考えると、基本的に、通常の言語は3つの部分に分割できるということですxy、およびz、言語のすべてのインスタンスはxy * z (*はKleeneの繰り返し、つまりyの0個以上のコピーです。)基本的に、展開できる「非終端」が1つあります。

さて、文脈自由言語はどうですか?似たようなものがあります コンテキストフリー言語の補題 言語の文字列を5つの部分に分割しますuvxyz、そして言語のすべてのインスタンスはinuvxyz、i≥0。今、two「(非端末)」があります。これは、複製またはポンプできる限り、同じ番号があります

53
Charlie Martin

通常の文法と文脈自由文法の違い:(N、Σ、P、S):端末、非端末、プロダクション、開始状態端末記号

●正式な文法で定義された言語の基本記号

●abc

非終端記号(または構文変数)

●生産規則に従って終端記号のグループに置き換えられます

●ABC

通常の文法:右または左の通常の文法右の通常の文法、すべての規則は形式に従います

  1. B→a(BはNの非終端記号、aはΣの終端記号)
  2. B→aC(ここで、BとCはN、aはΣ)
  3. B→ε(BはNにあり、εは空の文字列、つまり長さが0の文字列)

通常の左文法、すべてのルールはフォームに従います

  1. A→a(AはNの非終端記号、aはΣの終端記号)
  2. A→Ba(AとBはN、aはΣ)
  3. A→ε(AはN、εは空の文字列)

文脈自由文法(CFG)

○すべての生成規則がV→wの形式である形式文法

○Vは単一の非終端記号です

○wは端末および/または非端末の文字列です(wは空にすることができます)

15
stringRay2014

正規表現

  • 字句解析の基礎
  • 通常の言語を表す

文脈自由文法

  • 解析の基礎
  • 言語構造を表現する

enter image description here

7
Ahmed Salem

通常の文法:-次のような生成を含む文法はRGです:

V->TV or VT
V->T

ここで、V =変数およびT =端末

RGは左線形文法または右線形文法ですが、中間線形文法ではありません。

私たちが知っているように、すべてのRGは線形文法ですが、左線形または右線形文法のみがRGです。

通常の文法はあいまいな場合があります。

S->aA|aB
A->a
B->a

Ambiguous Grammar:-文字列xに対して、複数のLMDまたはRMD以上または複数の解析ツリーまたは1つのLMDと1つのRMDが存在しますが、両方が異なる解析ツリーを生成します。

                S                   S

              /   \               /   \
             a     A             a     B
                    \                   \
                     a                   a

この文法は、2つの構文解析木なので曖昧な文法です。

CFG:-プロダクションが次の形式の場合、文法はCFGと呼ばれます。

   V->@   where @ belongs to (V+T)*

DCFL:-すべてのDCFLはLL(1)文法であり、すべてのLL(1)はLR(1)なので、曖昧になることはありません。したがって、DCFGは決して曖昧ではありません。

また、すべてのRLはDCFLであるため、RLは決して曖昧になることはありません。RGは曖昧かもしれませんが、RLではありません。

CFL: CFlあいまいではない場合もあります。

注: RL本質的に曖昧になることはありません。

5
user2623906

すべてのプロダクションルールの形式がAの場合、文法はコンテキストに依存しません(つまり、ルールの左側は単一の変数のみになります。右側は無制限であり、端末と変数の任意のシーケンスになります)。 Vは有限集合(変数)、_は有限集合(端末)、Sは開始変数、Rは規則の有限集合である4タプルとして文法を定義できます。 V
通常の文法は右または左の線形ですが、文脈自由文法は基本的に端末と非端末の任意の組み合わせです。したがって、通常の文法は文脈自由文法のサブセットであると言えます。これらのプロパティの後、Context Free LanguagesセットにはRegular Languagesセットも含まれていると言えます