|
形式文法(けいしきぶんぽう、''Formal Grammar'')は、形式的に与えられた(形式体系を参照)文法である。「言語」をその言語における文の集合として与えるものとして、ここでは、(有限の)文字群上の有限長の文字列の(通常無限な)集合が、形式的に記述される。 形式文法にはふたつの捉えかたがある。それは「生成」と「分析」である。#チョムスキー階層の節および単独記事に詳細があるが、両者は対応するので、ある意味では同じものをそれぞれ逆の側から見たものにすぎない。 以下で「文法の規則(構文規則)の集まり」と呼んでいるのは、具体的には、句構造規則#基本モデルにあるようなものである。また終端記号と非終端記号の記事も参照のこと。 * 生成文法(''Generative grammar'')は、文法の規則(構文規則)の集まりを「トップレベルの非終端記号(たとえば <文>)から始めて、右辺に書き換える書き換え規則を適用していくことによって言語の文字列を生成することができる規則の集まり」と見るものである。 * 分析的文法(''Analytic grammar'')は、文法の規則(構文規則)の集まりを「任意の終端記号列に対し、パターンが一致すれば右辺から左辺に書き換え規則が適用できる規則の集まりであり、最終的にトップレベルの非終端記号(たとえば <文>)が得られれば受理されたとして、入力の列がその言語に含まれるか否かを判定できるもの」と見るものである。 生成文法は、ある言語に含まれる文字列を生成するアルゴリズムを定式化するもの、分析的文法は、ある言語に含まれる文字列を構文解析し受理するアルゴリズムを定式化するもの、とも言える。(トップダウン構文解析とボトムアップ構文解析とまぎらわしいが、それらはどちらも分析的である) == 生成文法 == 生成文法は文字列変換規則の集まりである。ある言語の文字列を生成するには、まずひとつの「開始」文字だけから成る文字列から始めて、規則を適当な回数適用して文字列を書き換えていく。逆に言えば、その言語はその規則群によって生成される全文字列を含む。ある規則の組み合わせで生成された文字列について、別の規則の適用の仕方でも同じ文字列が生成できる場合、その文法は曖昧であると言う。 たとえば、'' と '' から成る文字セットがあり、開始記号 '' に対して以下の規則を適用するものとする。 : 1. : 2. そこで、"" から開始して、適用する規則を選んでいくことができる。規則1を選ぶと、開始記号 '' から '' に変換されるので "" が得られる。再度規則1を選ぶと、'' が '' に変換されるので全体として "" となる。この過程は最終的に本来の文字セット(つまり '' と '')だけから構成される文字列になるまで続けられる。さて、終了させるために規則2を適用すると '' が '' に変換されるので、最終的に "" を得る。この過程をまとめると となる。この文法による言語はこのような過程で生成される全文字列 を含む。 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「形式文法」の詳細全文を読む スポンサード リンク
|