誰かが文脈自由文法とは何かを私に説明できますか?Wikipediaのエントリ、次に正式な文法のWikipediaのエントリを調べた後、私は完全に戸惑いました。誰かがこれらのことを説明できるほど親切でしょうか?
構文解析と、正規表現エンジンの制限についても調査したいので、これは不思議に思っています。
これらの用語が直接プログラミングに関連しているか、一般的に言語学に関連しているかはわかりません。その場合は、申し訳ありませんが、もしそうであれば移動できますか?
誰かが文脈自由文法とは何かを私に説明できますか?Wikipediaのエントリ、次に正式な文法のWikipediaのエントリを調べた後、私は完全に戸惑いました。誰かがこれらのことを説明できるほど親切でしょうか?
構文解析と、正規表現エンジンの制限についても調査したいので、これは不思議に思っています。
これらの用語が直接プログラミングに関連しているか、一般的に言語学に関連しているかはわかりません。その場合は、申し訳ありませんが、もしそうであれば移動できますか?
回答:
文脈自由文法は、特定の特性を満たす文法です。コンピュータサイエンスでは、文法は言語を記述します。具体的には、正式な言語を記述します。
形式言語は、文字列のセット(オブジェクトのコレクションの数学的用語)です(シンボルのシーケンス...「文字列」という言葉のプログラミングでの使用に非常に似ています)。形式言語の簡単な例は、長さ3のすべてのバイナリ文字列のセット、{000、001、010、011、100、101、110、111}です。
文法は、文法で記述された言語で文字列を構成するために実行できる変換を定義することによって機能します。文法は、開始記号(通常はS)を記号の文字列に変換する方法を説明します。上記の言語の文法は次のとおりです。
S -> BBB
B -> 0
B -> 1
これを解釈する方法は、ということであるS
に置き換えることができBBB
、かつB
0に置き換えることができ、そしてB
私たちが行うことができ、文字列010を構成するために1.そうで置き換えることができますS -> BBB -> 0BB -> 01B -> 010
。
文脈自由文法とは単に、置き換えるもの(矢印の左側)が単一の「非終端」記号である文法です。非終端記号は、最終的な文字列に表示できない文法で使用する記号です。上記の文法では、「S」と「B」は非終端記号であり、「0」と「1」は「終端」記号です。好きな文法
S -> AB
AB -> 1
A -> AA
B -> 0
「AB-> 1」のような規則が含まれているため、規則的ではありません。
言語理論は計算理論に関連しています。コンピュータサイエンスのより哲学的な側面は、どのプログラムが可能であるか、またはこれから作成することが可能になるか、および解決するアルゴリズムを作成することが不可能である問題の種類を決定することです。
正規表現は、正規言語を記述する方法です。通常の言語は、決定論的有限オートマトンによって決定できる言語です。
有限状態機械に関する記事を読む必要があります:http : //en.wikipedia.org/wiki/Finite_state_machine
そして通常の言語:http : //en.wikipedia.org/wiki/Regular_language
すべての通常の言語はコンテキストフリー言語ですが、通常ではないコンテキストフリー言語もあります。コンテキストフリー言語は、コンテキストフリーグラマーまたは単一のスタックを持つ有限状態マシンであるプッシュダウンオートマトンによって受け入れられるすべての文字列のセットです。http://en.wikipedia.org/wiki/Pushdown_automaton#PDA_and_Context-free_Languages
文字列がその言語であるかどうかを判断するために、チューリングマシン(コンピューターに記述できるあらゆるプログラム)を必要とする、より複雑な言語があります。
言語理論は、P対NPの問題やその他の興味深い問題にも非常に関連しています。
私のコンピュータサイエンス入門3年目のテキストブックは、このことを説明するのがかなり上手でした:計算理論入門。Michael Sipserによる。しかし、新しいものを購入するのに160ドルほどかかり、それほど大きくありません。多分あなたは中古のコピーを見つけることができるか、図書館またはそれがあなたを助けるかもしれない何かでコピーを見つけることができます。
編集:
正規表現とそれ以上の言語のクラスの制限は、過去50年間ほど研究されてきました。通常の言語のポンピングレンマに興味があるかもしれません。これは、特定の言語が規則的でないことを証明する手段です。
http://en.wikipedia.org/wiki/Pumping_lemma_for_regular_languages
言語が通常ではない場合、それはContext Freeである可能性があります。つまり、Context Free Grammerによって記述される可能性があります。または、それがより高い言語クラスでさえも、Context Freeのポンプレンマによって、それがContext Freeではないことを証明できます。正規表現の言語と同様の言語。
言語が決定できないこともあります。つまり、チューリングマシン(コンピューターで実行できるプログラム)でさえ、その言語で文字列を受け入れるか拒否するかを決定するようにプログラムできません。
あなたが最も興味を持っているのは、正規表現で決定できる言語を確認するための有限状態機械(決定論と決定論の両方)と、どの言語が正規でないかを証明するためのポンプレンマです。
基本的に、ある種の記憶またはカウントする能力が必要な言語は、規則的ではありません。たとえば、マシンが括弧を開いたかどうかを覚えておく必要があるため、括弧を閉じる必要があるかどうかをマシンが覚えておく必要があるため、括弧を一致させる言語は規則的ではありません。
少なくとも3つのbを含む、文字aおよびbを使用するすべての文字列の言語は、通常の言語です:a ba ba ba
aより多くのbを含む文字aおよびbを使用するすべての文字列の言語は規則的ではありません。
また、次の例のように、すべての有限言語が規則的である必要はありません。
aより大きいbを含む文字aとbを使用して、50文字未満のすべての文字列の言語は、それが(b | abb | bab | bba | aabbb | ababb |。 ..)すべての可能な組み合わせが一覧表示されるまでそのままにします。
Automata Theorem