CNFは必要ありません。文法構造を変更するという欠点があります。ただし、RHSの長さが複雑さを決定するため、右側が2(2形式)より長くならないように、中間の非端末を導入する必要があります。直感的に説明するための最良の試みは、メモリが役立つ場合、1976年に計算言語学会議で発表されたBeau Shielの論文「Context Free Parsingの観察」です。Earleyのアルゴリズムは暗黙的に2形式を使用します。アルゴリズムに隠されているだけです。解析フォレストの回復と処理については、「交差点フォレストの解析」のWebをご覧ください。実際には非常に簡単です。引用または目次からタイトルまたは著者を取得して直接検索する場合、多くの論文がウェブ上にあります。
実際、CFよりもはるかに多くのことができますが、それでも多項式時間で解析フォレストを取得できます。質問は、時々、それを手に入れたらどうすることができますか?
最後の記事の目的の1つは、複雑なアルゴリズム(GLRなど)が必ずしも時間や空間で何かを購入するわけではなく、解析フォレストを変更する可能性があることを示すことです。
教育についての1つの発言。Earleyは、それ自体が独創的であり、教えるには非常に複雑であり、本質的に同じ教育コンテンツを備えたより単純なアルゴリズムに置き換えることができると思います。教えることは概念や技術についてです。Earleyのアルゴリズムでは、本質的な概念は詳細の複雑さに隠されており、テクノロジーの観点からは時代遅れです。これは素晴らしい論文でしたが、それが最高の教育的アプローチであることを意味するものではありません。
計算言語学の文献には、通常のコンピューターサイエンスチャネルよりも多くの情報が含まれている場合があります。Ceriel-Grune-Jacobsの本はありませんが、適切な参考文献がすべて揃っていないと驚くでしょう(選択基準についてはわかりませんが)。
コメントのリクエストに応じて補完する(2013年7月7日)
これは、Earleyのアルゴリズムよりも単純なアルゴリズムの存在を補足するものです。
先ほど述べたように、「交差点フォレストの解析」でウェブを検索すると、すぐに参照が得られ、そこからさらに掘り下げることができます。
基本的な考え方は、共有フォレストの構築と構文解析するすべてのパスは、有限オートマトンとコンテキストフリー文法を使用した、通常の言語とコンテキストフリー言語のBar Hillel、Perles、Shamirの古い交差点の構築に他ならないということです。CF文法が与えられると、入力文字列のみを認識する簡単なオートマトンに構造を適用します。以上です。共有フォレストは、交差点の単なる文法です。それは準同型写像を介して元の文法に関連し、与えられた文字列のみを認識しますが、その準同型までの元の文法のすべての解析木(すなわち、非終端の単純な名前変更)を持ちます。
結果の文法には、多くの役に立たないもの、非終端記号、ルールが含まれています。これらは、公理から到達できない(初期シンボルから派生した文字列にはありません)か、非生産的です(端末に派生できません)文字列)。
次に、最後に良いブラシで掃除する必要があります(長いかもしれませんが、アルゴリズム的には簡単です)、または最後にブラシをかけられる無駄な毛羽が少なくなるように構造を改善しようとすることができます。
たとえば、CYKの構造はまさにそれですが、作成されたすべてのルールと非ターミナルが生産的であるように編成されていますが、多くは到達不能です。これは、ボトムアップ手法から予想されるものです。
トップダウン手法(LR(k)ベースの手法など)は、到達不能なルールと非ターミナルを回避しますが、非生産的なルールを作成します。
ブラッシングの多くは、実際にはポインターを適切に使用することで達成できると思いますが、私は長い間これを見ていません。
実際、既存のアルゴリズムはすべて、本質的にそのモデルに従います。それが問題の核心であり、非常に簡単です。それではなぜそれを複雑さの中に埋めるのでしょうか?
多くの場合、これらの構造の静的ファクタリングを使用して、LR(k)、LL(k)パーサー構造に基づくリテラチャーで多くの「最適化」が提案されます(Earleyには静的ファクタリングはありません)。実際には、古い優先順位パーサーを含むすべての既知の手法に適用できます。最適化するもの、実際に最適化するのか、あるいは改善の恩恵がパーサーの複雑さを増すだけの価値があるのかがわからないため、引用符の間に「最適化」を入れます。これについては、形式的または実験的な客観的データはほとんどありません(いくつかあります)が、さらに多くの主張があります。興味のあることは何も言っていません。いくつかのスマートなアイデアがあります。
さて、基本的な考え方がわかれば、「最適化」または改善は、興味のあるパーサー構築手法に従って、文法からプッシュダウンオートマトンを構築することにより、静的に(場合によっては段階的に)導入できます。そのオートマトン(グラマーに対して行うのとほぼ同じこと)またはそのオートマトンから派生したグラマーへの交差のクロス積構築。
次に、ベルとホイッスルを紹介できますが、それは主に技術的な詳細です。
Isaac NewtonのPhilosophiæNaturalis Principia Mathematicaは、物理学と数学のすばらしい作品であると伝えられています。多くの学生の読書リストに載っているとは思いません。他のすべての条件が同じであれば、アーリーのアルゴリズムを教えることは非常に有用ではないと思いますが、重要な歴史的作品です。学生はそのまま学ぶのに十分です。多くの人に撃ち落とされる危険があるので、Knuth LR(k)の論文についてもほぼ同じだと思います。これは素晴らしい理論的分析であり、おそらく理論家にとって重要な読み物です。ハードウェアとソフトウェアの両方の技術の現状を考えると、パーサーを構築するのにこれが非常に重要であることを強く疑います。解析がコンパイル時間の重要な部分であった時代は過ぎ去り、または、コンパイラの速度が重要な問題であったとき(私は、約30年前にコストをコンパイルして亡くなったある会社を知っていました)。解析の専門家はある時点でその専門知識を学びたいかもしれませんが、コンピューターサイエンス、プログラミング、またはエンジニアリングの平均的な学生はそれを必要としません。
学生が構文解析により多くの時間を費やさなければならない場合、計算言語学で使用される拡張機能など、より有用で形成的な拡張機能があります。教育の最初の役割は、科学知識を構築する単純なアイデアを抽出することであり、研究科学者が受けなければならなかったものを学生に強制することではありません(博士課程の学生を除く:通過儀礼です:-)。
著者からのライセンスCC BY-SA 3.0