Automata-theory-context-free-grammar-introduction

提供:Dev Guides
移動先:案内検索

文脈自由文法の紹介

*_Definition_* -文法ルールの有限セットで構成されるコンテキストフリー文法(CFG)は4倍*(N、T、P、S)*です。
  • N は、非終端記号のセットです。
  • T は、* N∩T = NULLの端末のセットです。*
  • P はルールのセットです。* P:N→(N∪T)*、つまり、制作ルールの左側には *P には右コンテキストまたは左コンテキストがあります。
  • S は開始記号です。

  • 文法(\ {A}、\ {a、b、c}、P、A)、P:A→aA、A→abc。
  • 文法(\ {S、a、b}、\ {a、b}、P、S)、P:S→aSa、S→bSb、S→ε
  • 文法(\ {S、F}、\ {0、1}、P、S)、P:S→00S | 11F、F→00F | ε

派生ツリーの生成

派生ツリーまたは解析ツリーは、コンテキストフリーの文法から派生した文字列のセマンティック情報をグラフィカルに表す順序付けられたルート付きツリーです。

表現手法

  • ルート頂点-開始記号でラベル付けする必要があります。
  • 頂点-非終端記号でラベル付けされています。
  • -終端記号またはεでラベル付けされています。

S→x〜1〜x〜2〜……x〜n〜がCFGのプロダクションルールである場合、解析ツリー/派生ツリーは次のようになります-

派生ツリー

派生ツリーを描くには2つの異なるアプローチがあります-

トップダウンアプローチ-

  • 開始記号 S で始まります
  • プロダクションを使用してツリーの葉に行きます

ボトムアップアプローチ-

  • 木の葉から始まる
  • 開始記号 S であるルートまで上方向に進みます

木の派生または収量

解析ツリーの派生または収量は、Nullを無視して、ツリーの葉のラベルを左から右に連結することによって取得される最終文字列です。 ただし、すべての葉がヌルの場合、派生はヌルです。

CFG \ {N、T、P、S}を

N = \ {S}、T = \ {a、b}、開始記号= S、P = S→SS | aSb | ε

上記のCFGから派生したものの1つは「abaabb」です

S→SS→aSbS→abS→abaSb→abaaSbb→abaabb

木の収量

センテンス形式と部分派生ツリー

部分派生ツリーは、派生ツリー/解析ツリーのサブツリーであり、そのすべての子がサブツリーに含まれるか、またはいずれもサブツリーに含まれません。

いずれかのCFGの場合、プロダクションは-

S→AB、A→aaA | ε、B→Bb | ε

部分派生ツリーは次のようにすることができます-

センテンスフォームと部分派生ツリー

部分派生ツリーにルートSが含まれている場合、それは*センテンスフォーム*と呼ばれます。 上記のサブツリーも文型です。

文字列の左端と右端の派生

  • 左端の派生-左ステップの派生は、各ステップで左端の変数に生産を適用することによって得られます。
  • 右端の導出-右端の導出は、各ステップで右端の変数に生産を適用することによって取得されます。
  • 例 *

CFGの生産ルールのセットを

X→X + X | X* X | X | a

アルファベット\ {a}以上。

文字列 "a + a a" *の左端の派生は-

X→X + X→a + X→a + X X→a + a X→a + a * a

上記の文字列の段階的な導出は以下のように示されています-

左端

上記の文字列 "a + a a" *の右端の派生は-

X→X X→X a→X + X a→X + a a→a + a * a

上記の文字列の段階的な導出は以下のように示されています-

右端

左右の再帰文法

文脈自由文法 G で、 X→Xa という形式の生成物がある場合、 X は非終端記号で、 'a' は終端文字列で、* leftと呼ばれます再帰生産*。 左再帰生成を持つ文法は、*左再帰文法*と呼ばれます。

そして、文脈自由文法 G で、生産が X→aX の形式である場合、 X は非終端記号であり、 'a' は終端文字列です。 正しい再帰的生産。 正しい再帰生成を持つ文法は、 right recursive grammar と呼ばれます。