actions

チョムスキー階層

チョムスキー階層(チョムスキーかいそう、Chomsky Hierarchy)は、形式言語を生成する形式文法の包含階層(「形式言語の階層」)で、「句構造文法Phrase Structure Grammars)の階層」などとも言う。1956年にノーム・チョムスキーが発表した。

形式文法

形式文法の構成要素は、「終端記号」(Terminal Symbols)の有限集合(形式言語の単語で使われる文字)、「非終端記号」(Nonterminal Symbols)の有限集合、「生成規則」(Production Rules)の有限集合(各生成規則は右側と左側に記号列で構成される単語を含む)、「開始記号」(Start Symbol)から構成される。生成規則はある単語に適用され、規則の左側にある単語を右側にある記号列で置換する。導出は一連の規則適用過程である。このような文法で開始記号から始めて生成規則を適用していくことによって終端記号のみから構成される単語を生成する。そのような単語全体の集合が形式言語である。

非終端記号は大文字、終端記号は小文字で表すことが多く、開始記号は [math]S[/math] で示される。例えば、終端記号 [math]\{a, b\}[/math] と非終端記号 [math]\{S, A, B\}[/math] から構成される文法の生成規則が以下のようなものであるとする。

  • [math]S \rightarrow ABS[/math]
  • [math]S \rightarrow \epsilon[/math] (ここで [math]\epsilon[/math] は空の文字列)
  • [math]BA \rightarrow AB[/math]
  • [math]BS \rightarrow b[/math]
  • [math]Bb \rightarrow bb[/math]
  • [math]Ab \rightarrow ab[/math]
  • [math]Aa \rightarrow aa[/math]

これにより開始記号 [math]S[/math] から定義される全単語で構成される言語は [math]a^{n} b^{n}\quad[/math] である([math]n[/math] 個の [math]a[/math] の後に [math]n[/math] 個の [math]b[/math] が続く形式)。同様の言語をもっと単純な文法で定義した例を以下に示す。終端記号 [math]\{p, q\}[/math]、非終端記号 [math]\{S\}[/math]、開始記号 [math]S[/math] で生成規則は以下のようになる。

[math]S \rightarrow pSq[/math]
[math]S \rightarrow \epsilon[/math]

階層

チョムスキー階層は以下のレベルから構成される。より一般的には形式言語の階層の記事を参照のこと。

  • タイプ-0 文法(制限のない文法)は全ての形式文法を包含する。この文法はチューリングマシンが認識できる全言語を生成できる。その言語群は帰納的可算言語Recursively Enumerable Language)として知られている。これはチューリングマシンが必ず停止して判定可能な帰納言語Recursive Language)とは異なる。
  • タイプ-1 文法(文脈依存文法)は文脈依存言語を生成する。この文法は [math]\alpha A\beta \rightarrow \alpha\gamma\beta[/math] という形式の生成規則を持ち、[math]A[/math] は非終端記号、[math]\alpha[/math][math]\beta[/math][math]\gamma[/math] は終端記号と非終端記号から構成される文字列である。[math]\alpha[/math][math]\beta[/math] は空の文字列の場合もあるが、[math]\gamma[/math] は空でない文字列でなければならない。[math]S[/math] が生成規則の右側に現れない場合、[math]S \rightarrow \epsilon[/math] という規則が存在しても良い。この文法によって記述される言語は線形拘束オートマトンで認識できる。
  • タイプ-2 文法(文脈自由文法)は文脈自由言語を生成する。この文法は [math]A \rightarrow \gamma[/math] という形式の生成規則を持ち、[math]A[/math] は非終端記号、[math]\gamma[/math] は終端記号と非終端記号から構成される文字列である。この文法で生成される言語群は非決定性プッシュダウン・オートマトンが認識できる言語である。多くのプログラミング言語の文法は、ほぼ[1]文脈自由文法である。
  • タイプ-3 文法(正規文法)は正規言語を生成する。この文法の生成規則は左側には必ずひとつの非終端記号があり、右側には必ずひとつの終端記号とひとつかゼロ個の非終端記号がある(順番はひとつの文法内では決められている。つまり必ず「終端・非終端」か、必ず「非終端・終端」)。[math]S[/math] が生成規則の右側に現れない場合、[math]S \rightarrow \epsilon[/math] という規則が存在しても良い。この文法で生成される言語群は有限オートマトンで判定可能である。さらにこのタイプの形式言語は正規表現として使用されている。正規言語は検索パターンの定義やプログラミング言語の字句構造に一般的に使われている。

帰納言語に対応する文法がこの階層のメンバーではないことに注意されたい。

正規言語は全て文脈自由言語に含まれ、文脈自由言語は全て文脈依存言語に含まれ、文脈依存言語は全て帰納言語に含まれ、帰納言語は全て帰納的可算言語に含まれる。これは正当な包含関係である(つまり、各タイプは上位タイプの真部分集合である)。したがって帰納言語ではない帰納的可算言語があり、文脈依存言語ではない帰納言語があり、文脈自由言語ではない文脈依存言語があり、正規言語ではない文脈自由言語がある。

以下の表はチョムスキーの四種類の文法をまとめたものであり、各クラスの生成する言語、それを認識するオートマトン、生成規則の制限を記している。

句構造文法階層 文法 言語 オートマトン 生成規則
タイプ-0 -- 帰納的可算 チューリングマシン 制限なし
タイプ-1 文脈依存 文脈依存 線形拘束オートマトン [math]\alpha A\beta \rightarrow \alpha\gamma\beta[/math]
タイプ-2 文脈自由 文脈自由 プッシュダウン・オートマトン [math]A \rightarrow \gamma[/math]
タイプ-3 正規 正規 有限オートマトン [math]A \rightarrow a[/math] および

[math]A \rightarrow aB[/math] または
[math]A \rightarrow Ba[/math]

参考文献

  • Chomsky, Noam (1956年). “Three models for the description of language”. IRE Transactions on Information Theory (2): 113-124.  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.: Computer Programming and Formal Languages. Amsterdam: North Holland, 118-161. 

脚注

  1. たとえばC言語の場合の1例としては、typedefが現れた後は同じ綴りが単なる識別子から型名に変化するため、厳密には文脈自由文法で完全には扱えない。

関連項目

外部リンク