web-dev-qa-db-ja.com

文脈自由文法対文脈依存文法?

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

私が知っているのは

Context-free grammarは、すべてのproduction(rewrite)ルールがV→wの形式である形式文法です。ここで、Vは単一の非終端記号、wは終端文字列および/または非終端文字列です。 。 wは空にすることができます

文脈依存文法は、生成規則(書き換え規則)の左辺と右辺を終端記号と非終端記号のコンテキストで囲むことができる形式文法です。

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

39
user1004413

ここで重要な詳細は、文法がaccept文字列ではないことです。それらは生成文字列です。文法は、言語に含まれるすべての可能な文字列を生成する手段を提供する言語の説明です。特定の文字列が言語に含まれているかどうかを確認するには、recognizerを使用します。これは、特定の文字列を処理し、「はい」または「いいえ」と言うオートマトンです。

context-free grammar (CFG)は、(既に述べたように)各プロダクションの形式がA→wである文法です。ここで、Aは非終端記号、wは終端文字列、非終端記号。非公式には、CFGは、任意の非終端記号を任意の時点でそのプロダクションに展開できる文法です。文法の言語は、開始記号から派生できる端末の文字列のセットです。

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

文字列がCFGとCSGのどちらに含まれているかを判断するには、多くのアプローチがあります。最初に、指定された文法の認識機能を構築できます。 CFGの場合、pushdown automaton(PDA)は、コンテキストフリー言語を正確に受け入れるタイプのオートマトンであり、 PDAへのCFG。文脈依存文法の場合、使用するオートマトンはlinear bounded automaton(LBA)と呼ばれます。

ただし、これらのアプローチは、単純に処理された場合、あまり効率的ではありません。文字列がCFGの言語に含まれているかどうかを判断するには、はるかに効率的なアルゴリズムがあります。たとえば、多くの文法では、 LL(k) または LR(k) パーサーを構築できます。 time)文字列が文法に含まれるかどうかを決定します。すべての文法は、 Earley parser を使用して解析できます。これはO(n3)長さnの文字列が文法に含まれているかどうかを判断できます(興味深いことに、O(n2)、およびlookaheadsを使用すると、O(n) time!)のLR(k)文法を解析できます。 「文字列xは文法Gによって生成された言語に含まれていますか?」という質問に純粋に興味がある場合は、これらのアプローチの1つが優れています。文字列xがどのように生成されたかを知りたい場合(parse treeを見つけて)、これらのアプローチを適応させてこの情報も提供できます。ただし、CSGの解析は一般にPSPACE完全であるため、最悪の多項式時間で実行される既知の解析アルゴリズムはありません。ただし、実際には迅速に実行される傾向があるアルゴリズムがいくつかあります。 Parsing Techniques:A Practical Guide(以下を参照)の著者は、 あらゆる種類の解析アルゴリズムを含む素晴らしいページ (コンテキストを解析するものを含む)デリケートな言語。

構文解析の詳細に興味がある場合は、Grune and Jacobsによる優れた本「 Parsing Techniques:A Practical Guide、Second Practical Guide 」を参照してください。文字列が文法に含まれているかどうか、もしそうであれば、解析アルゴリズムによってどのように生成されるかを決定するアルゴリズム。

お役に立てれば!

109
templatetypedef

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

1
Alessandro S

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

0
Rob Neuhaus