チョムスキー階層 (チョムスキーかいそう、Chomsky hierarchy )は、形式言語 を生成する形式文法 の包含階層(形式言語の階層 )で、句構造文法 (phrase structure grammar )の階層」などともいう。1956年にノーム・チョムスキー が発表した。
形式文法
形式文法の構成要素は、終端記号 (terminal symbol )の有限集合 (形式言語の単語で使われる文字)、非終端記号 (nonterminal symbol )の有限集合、生成規則(production rule )の有限集合(各生成規則は右側と左側に記号列で構成される単語を含む)、開始記号(start symbol )から構成される。生成規則はある単語に適用され、規則の左側にある単語を右側にある記号列で置換する。導出は一連の規則適用過程である。このような文法で開始記号から始めて生成規則を適用していくことで、終端記号のみから構成される単語を生成する。そのような単語全体の集合が形式言語である。
非終端記号は大文字、終端記号は小文字で表すことが多く、開始記号は
S
{\displaystyle S}
で示される。例えば、終端記号
{
a
,
b
}
{\displaystyle \{a,b\}}
と非終端記号
{
S
,
A
,
B
}
{\displaystyle \{S,A,B\}}
から構成される文法の生成規則が以下のようなものであるとする。
S
→
A
B
S
{\displaystyle S\rightarrow ABS}
S
→
ϵ
{\displaystyle S\rightarrow \epsilon }
(ここで
ϵ
{\displaystyle \epsilon }
は空の文字列)
B
A
→
A
B
{\displaystyle BA\rightarrow AB}
B
S
→
b
{\displaystyle BS\rightarrow b}
B
b
→
b
b
{\displaystyle Bb\rightarrow bb}
A
b
→
a
b
{\displaystyle Ab\rightarrow ab}
A
a
→
a
a
{\displaystyle Aa\rightarrow aa}
これにより開始記号
S
{\displaystyle S}
から定義される全単語で構成される言語は
a
n
b
n
{\displaystyle a^{n}b^{n}}
である(
n
{\displaystyle n}
個の
a
{\displaystyle a}
の後に
n
{\displaystyle n}
個の
b
{\displaystyle b}
が続く形式)。同様の言語をもっと単純な文法で定義した例を以下に示す。終端記号
{
p
,
q
}
{\displaystyle \{p,q\}}
、非終端記号
{
S
}
{\displaystyle \{S\}}
、開始記号
S
{\displaystyle S}
で生成規則は以下のようになる。
S
→
p
S
q
{\displaystyle S\rightarrow pSq}
S
→
ϵ
{\displaystyle S\rightarrow \epsilon }
階層
チョムスキー階層は以下のレベルから構成される。より一般的には形式言語の階層 の記事を参照のこと。
タイプ-0 文法(制限のない文法 (英語版 ) )は全ての形式文法を包含する。この文法はチューリングマシン が認識できる全言語を生成できる。その言語群は帰納的可算言語 (recursively enumerable language )として知られている。これはチューリングマシンが必ず停止して判定可能な帰納言語 (recursive language )とは異なる。
タイプ-1 文法(文脈依存文法 )は文脈依存言語 を生成する。この文法は
α
A
β
→
α
γ
β
{\displaystyle \alpha A\beta \rightarrow \alpha \gamma \beta }
という形式の生成規則を持ち、
A
{\displaystyle A}
は非終端記号、
α
{\displaystyle \alpha }
と
β
{\displaystyle \beta }
と
γ
{\displaystyle \gamma }
は終端記号と非終端記号から構成される文字列である。
α
{\displaystyle \alpha }
と
β
{\displaystyle \beta }
は空の文字列の場合もあるが、
γ
{\displaystyle \gamma }
は空でない文字列でなければならない。
S
{\displaystyle S}
が生成規則の右側に現れない場合、
S
→
ϵ
{\displaystyle S\rightarrow \epsilon }
という規則が存在しても良い。この文法によって記述される言語は線形拘束オートマトン で認識できる。
タイプ-2 文法(文脈自由文法 )は文脈自由言語 を生成する。この文法は
A
→
γ
{\displaystyle A\rightarrow \gamma }
という形式の生成規則を持ち、
A
{\displaystyle A}
は非終端記号、
γ
{\displaystyle \gamma }
は終端記号と非終端記号から構成される文字列である。この文法で生成される言語群は非決定性プッシュダウン・オートマトン が認識できる言語である。多くのプログラミング言語 の文法は、ほぼ[ 1] 文脈自由文法 である。
タイプ-3 文法(正規文法 )は正規言語 を生成する。この文法の生成規則は左側には必ずひとつの非終端記号があり、右側には必ずひとつの終端記号とひとつかゼロ個の非終端記号がある(順番はひとつの文法内では決められている。つまり必ず「終端・非終端」か、必ず「非終端・終端」)。
S
{\displaystyle S}
が生成規則の右側に現れない場合、
S
→
ϵ
{\displaystyle S\rightarrow \epsilon }
という規則が存在しても良い。この文法で生成される言語群は有限オートマトン で判定可能である。さらにこのタイプの形式言語は正規表現 として使用されている。正規言語は検索パターンの定義やプログラミング言語の字句構造に一般的に使われている。
帰納言語に対応する文法がこの階層のメンバーではないことに注意されたい。
正規言語は全て文脈自由言語に含まれ、文脈自由言語は全て文脈依存言語に含まれ、文脈依存言語は全て帰納言語に含まれ、帰納言語は全て帰納的可算言語に含まれる。これは真の包含関係である(つまり、各タイプは上位タイプの真部分集合 である)。したがって帰納言語ではない帰納的可算言語があり、文脈依存言語ではない帰納言語があり、文脈自由言語ではない文脈依存言語があり、正規言語ではない文脈自由言語がある。
以下の表はチョムスキーの四種類の文法をまとめたものであり、各クラスの生成する言語、それを認識するオートマトン、生成規則の制限を記している。
参考文献
Chomsky, Noam (1956). “Three models for the description of language” (PDF) . IRE Transactions on Information Theory (2): 113– 124. 2024年3月24日時点のオリジナルよりアーカイブ (PDF) .
Chomsky, Noam (1959). “On certain formal properties of grammars”. Information and Control (2): 137– 167.
Chomsky, Noam; Schützenberger, Marcel P. (1963). “The algebraic theory of context free languages”. In Braffort, P.; Hirschberg, D. (ed.). Computer Programming and Formal Languages . Amsterdam: North Holland. pp. 118– 161. {{cite book2 }}
: CS1メンテナンス: 複数の名前/editor (カテゴリ )
脚注
^ たとえばC言語の場合の1例としては、typedefが現れた後は同じ綴りが単なる識別子から型名に変化するため、厳密には文脈自由文法で完全には扱えない。
外部リンク