更新:2024/08/17
文脈依存文法の定義・具体例・生成規則・オートマトンについて


はるか
文脈依存文法って文脈自由文法と何が違う?

ふゅか
名前の通り、文脈。つまり、前後の記号に影響を受けるんだよ。
1. 文脈依存文法とは
文脈依存文法CSG Gは以下のように表されます。
\[ G = (N, \Sigma, P, S) \]
ここで、文脈自由文法と同様に、各要素の意味は次の通りです。
- \( N \) (非終端記号の集合): 文法で使用される非終端記号の集合。
- \( \Sigma \) (終端記号の集合): 文法で使用される終端記号の集合。
- \( P \) (生成規則の集合): 文脈依存文法の生成規則は、次の形式を取ります。\[ \alpha A \beta \rightarrow \alpha \gamma \beta \]ここで、\( A \in N \)、\( \alpha, \beta \in (N \cup \Sigma)^* \)、そして \( \gamma \in (N \cup \Sigma)^+ \) です。つまり、非終端記号 \( A \) は文脈 \( \alpha \) と \( \beta \) に囲まれている場合にのみ、文脈依存の規則に従って \( \gamma \) に置き換えられます。
- \( S \) (開始記号): 文法の開始記号であり、\( S \in N \) です。
文脈依存文法で生成される言語は、文脈依存言語と呼ばれます。

はるか
非終端記号を終端記号と非終端記号からなる文字列に変換する規則か。
2. 文脈依存文法の具体例
次の言語は有名な文脈自由言語でない言語の一つとして知られています。
\( L = \{ a^n b^n c^n \mid n \geq 1 \} \)
この言語は「同じ数の ‘a’、’b’、’c’ を含む文字列」の集合です。これは文脈自由言語ではないことも知らています。

はるか
a,b,cの数が同じ文字列か。

ふゅか
あと、順序はaaaaa・・・・・bbbbb・・・・・cccccみたいな感じだよ!
2.1. 文法の生成規則
言語 \( L = \{ a^n b^n c^n \mid n \geq 1 \} \) の文脈依存文法の生成規則は以下のように定義できます。
\( S \rightarrow aSBC \)
\( SB \rightarrow aBB \)
\( BB \rightarrow Bb \)
\( Bb \rightarrow bb \)
\( BC \rightarrow bC \)
\( bC \rightarrow bc \)
\( Sc \rightarrow c \)
2.2. 生成例

ふゅか
例えば、\( n = 2 \) の場合の生成過程を見てみましょう。

はるか
つまり、aabbccの生成規則。
開始記号 \( S \) からスタートし、以下のように展開されていきます。
- \( S \rightarrow aSBC \)
- \( aSBC \rightarrow aaBBBC \)
- \( aaBBBC \rightarrow aabBBC \)
- \( aabBBC \rightarrow aabBbC \)
- \( aabBbC \rightarrow aabbBC \)
- \( aabbBC \rightarrow aabbcC \)
- \( aabbcC \rightarrow aabbcc \)
したがって、文字列 \( aabbcc \) が生成されます。
この文脈依存文法では、終端記号が1つずつ生成され、各 \( a \) に対応する \( b \)、および各 \( b \) に対応する \( c \) が順番に生成されていくことで、言語 \( L = \{ a^n b^n c^n \mid n \geq 1 \} \) が構築されます。
3. オートマトンと形式文法の対応関係
オートマトンと形式文法の対応関係は次のようになります。
形式文法 | オートマン |
---|---|
句構造文法 | チューリングマシン |
文脈依存文法 | 線形有界オートマトン |
文脈自由文法 | プッシュダウンオートマトン |
正則文法(正規文法) | 有限オートマトン |

はるか
文脈依存文法は線形有界オートマトンに対応しているのか。
PR