46

この種の文法[文脈自由文法と文脈依存文法]が文字列を受け入れる理由を誰かが私に説明できますか?

私が知っているのは

文脈自由文法は、すべての生成(書き換え)規則がV→wの形式である形式文法です。ここで、Vは単一の非終端記号であり、wは終端記号および/または非終端記号の文字列です。wは空にすることができます

状況依存文法は、任意の生成(書き換え)ルールの左側と右側を終端記号と非終端記号のコンテキストで囲むことができる形式文法です。

しかし、これらの文法が文字列を受け入れる理由をどのように説明できますか?

4

3 に答える 3

127

ここで重要なことは、文法は文字列を受け入れないということです。それらは文字列を生成します。文法は、言語に含まれるすべての可能な文字列を生成する手段を提供する言語の記述です。特定の文字列が言語に含まれているかどうかを判断するには、特定の文字列を処理して「はい」または「いいえ」と言うある種のオートマトンである レコグナイザー を使用します。

文脈自由文法(CFG) は、(ご指摘のとおり) 各生成が A → w の形式を持つ文法です。ここで、A は非終端記号であり、w は終端記号と非終端記号の文字列です。非公式に言うと、CFG は、任意の非終端記号を任意の時点で任意の生成に展開できる文法です。文法の言語は、開始記号から派生できる終端文字列のセットです。

文脈依存文法(CSG) は、各生成が wAx → wyx の形式を持つ文法です。ここで、w と x は端末と非端末の文字列であり、y も端末の文字列です。言い換えれば、プロダクションは、「特定のコンテキストで A を見た場合、A を文字列 y に置き換えることができる」というルールを与えます。残念なことに、これらの文法が「文脈依存文法」と呼ばれるのは、「文脈自由」と「文脈依存」が反対ではないことを意味し、間違いなく多くの文脈依存型の文法があることを意味するためです。情報は考慮されますが、形式的には状況依存であるとは見なされません。

文字列が CFG に含まれているか CSG に含まれているかを判断するには、多くの方法があります。まず、指定された文法のレコグナイザーを構築できます。CFG の場合、プッシュダウン オートマトン(PDA) は、文脈自由言語を正確に受け入れる一種のオートマトンであり、任意の CFG を PDA に変換するための簡単な構造があります。文脈依存文法の場合、使用するオートマトンは線形境界オートマトン(LBA) と呼ばれます。

ただし、これらの上記のアプローチは、単純に扱うとあまり効率的ではありません。文字列が CFG の言語に含まれているかどうかを判断するには、はるかに効率的なアルゴリズムがあります。たとえば、多くの文法ではLL(k)またはLR(k)パーサーを構築できます。これにより、(線形時間で) 文字列が文法に含まれているかどうかを判断できます。すべての文法は、O(n 3 ) で長さ n の文字列が文法に含まれているかどうかを判断できるEarley パーサーを使用して解析できます (興味深いことに、O(n 2で明確な CFG を解析できます))、そして先読みを使用すると、O(n) 時間で任意の LR(k) 文法を解析できます!)。「文字列 x は文法 G によって生成された言語に含まれているか?」という質問に純粋に興味がある場合は、これらのアプローチのいずれかが優れています。文字列 x がどのように生成されたか (解析ツリーを見つけることによって) 知りたい場合は、これらのアプローチを適応させてこの情報を提供することもできます。ただし、CSG の解析は一般に PSPACE 完全であるため、最悪の場合の多項式時間で実行される既知の解析アルゴリズムはありません。ただし、実際には高速に実行される傾向があるアルゴリズムがいくつかあります。Parsing Techniques: A Practical Guide (以下を参照)の著者は、あらゆる種類の解析アルゴリズムを含む素晴らしいページをまとめました。、文脈依存言語を解析するものを含みます。

構文解析について詳しく知りたい場合は、Grune と Jacobs による優れた本 " Parsing Techniques: A Practical Guide, Second Edition " を読むことを検討してください。この本では、文字列が文法に含まれているかどうかを判断するためのあらゆる種類の構文解析アルゴリズムについて説明しています。もしそうなら、それが解析アルゴリズムによってどのように生成されるか。

于 2011-11-23T22:43:44.480 に答える
1

前に述べたように、Grammar は文字列を受け入れませんが、分析する言語の特定の単語を生成するための方法にすぎません。実際、形式言語理論の生成規則としての文法は、代わりに有限状態オートマトンがあなたが言っていること、特定の文字列の認識を行います。特に、Type 1 Languages (Chomsky's Hierarchy の Context Sensitive Languages) を認識するためには、再帰的な列挙可能なオートマトンが必要です。特定の言語の文法は、CS 言語の文字列のセットに集まるすべての文字列のプロパティを指定することのみを許可します。私の説明が明確だったことを願っています。

于 2012-06-06T17:49:35.377 に答える
0

文法が文字列を受け入れることを示す簡単な方法の 1 つは、その文字列の生成規則を示すことです。

于 2011-11-23T02:23:36.833 に答える