Linq to XML に基づいた .Net ビルド用の優れた無料の XPath 2.0 実装がないため、(これも経験のために) 自分で実装することを考えました。しかし、明確にするために(存在するものを構築するのではなく)、これらは私が見つけたXPath 2.0の実装です:
- サクソン.Net
- Query Machine - これには問題がありました - 例の例外
- XQSharp - 良いかもしれませんが、商用です (単一の開発者で ~300 $)
ここで、XPath 2.0 式などの言語を実装することがいかに難しいかについて考えてみたいと思います。XPath 2.0 式の EBNF を持つこのリンクを見つけました: http://www.w3.org/TR/2007/REC-xpath20-20070123/#id-grammarで、F# で作成することを考えています。 fslex/fsyacc の組み合わせ。
私のバックグラウンド(主観的): 以前にこれらのツールで遊んだことがありますが、いくつかの単純な式と非常に単純なプログラミング言語についてのみでした。さらに、Dragon book と Appel の最新コンパイラの ML 実装のほとんどを読みましたが、残念ながら、読みながら理論を実践していません。私は 1 年間コンピューター サイエンスを勉強しており、 ex とアルゴリズムに関する理論のコースを修了しfinite automaton
てCFL
いますが、大学に入る前から何年もの間開発者でした (プロの仕事で数年間 - 主に Web サイトのバックエンド)。
さて、解析の手順と私がカバーする傾向があるもの:
- Lex - 解析 - リダクション: FsLex/FsYacc。最初は Xpath 2.0 のすべてを適切にカバーするつもりはありませんが、少なくとも XPath 1.0 でできることのすべてに加えて、もう少し詳しく説明します。
- セマティック分析 - これにどれだけの意味があるかわかりません
- 最適化 - 私はこれをカバーする傾向がありません (少なくとも最初はそうではありません)。
- 実際のトラバースなど
- ...?
さて、上記に加えて具体的な質問:
- このサイズのパーサーを作成するのはどれほど難しいでしょうか? 私のバックグラウンドに基づいて、私はそれをすることができますか?
- 特に XPath 2.0 に関して見逃した重要な手順はありますか?
- 私が見逃したテクノロジーはありますか?
XDocument
パーサーを作成するには、XPath 2.0 など以外のこともカバーする必要がありますか?
明確XDocument
にするために、XPath 2.0式パーサーを作成し、この解析された式でトラバースなどを行いたいと考えています。組み合わせたのはクエリエンジンだと思います。
更新:これを見つけました: http://www.w3.org/2007/01/applets/xpathApplet.htmlには、解析とトラバースのコードが含まれています。良いスタートや参考になると思います:-)
あなたの答えは高く評価されます。