由于缺乏任何基于 Linq to XML 的 .Net 的免费 XPath 2.0 实现,我考虑过实现我自己的(也是为了经验)。但为了清楚起见(而不是构建存在的东西),这些是我发现的 XPath 2.0 实现:
现在,我想了解一下实现某些语言(例如 XPath 2.0 表达式)的难度。我发现这个链接有一个用于 XPath 2.0 表达式的 EBNF:http: //www.w3.org/TR/2007/REC-xpath20-20070123/#id-grammar我正在考虑用 F# 来制作它fslex/fsyacc 组合。
我的背景(主观):我以前玩过这些工具,但只是为了一些简单的表达式和一种非常简单的编程语言。此外,我已经阅读了大部分 Dragon 书籍和 Appel 在 ML 中的现代编译器实现 - 但不幸的是,我在阅读时没有将理论付诸实践。我已经学习了一年的计算机科学,在那里我完成了关于 ex 和算法的理论课程,finite automaton
但CFL
在大学之前我已经做了几年的开发人员(几年从事专业工作 - 主要是网站的后端)。
现在,解析的步骤和我倾向于涵盖的内容:
- Lex - 解析 - 缩减:FsLex/FsYacc。我不会一开始就涵盖所有 Xpath 2.0,但至少涵盖 XPath 1.0 可以做的所有事情 + 更多。
- 语义分析 - 我不确定这有多少
- 优化 - 我不倾向于涵盖这个(至少一开始不是)
- 实际遍历等
- ...?
现在,除上述之外的具体问题:
- 制作这种大小的解析器有多难?根据我的背景,我可以吗?
- 特别是关于 XPath 2.0,我是否遗漏了任何关键步骤?
- 有没有我错过的技术;我是否必须涵盖不仅仅是 XPath 2.0
XDocument
等才能制作解析器?
明确一点:我想XDocument
用这个解析的表达式制作一个 XPath 2.0 表达式解析器和遍历等。我猜想结合起来的是一个查询引擎。
更新:我发现了这个:http ://www.w3.org/2007/01/applets/xpathApplet.html ,其中包含解析和遍历的代码。我认为这将是一个不错的开始或参考:-)
您的回答将不胜感激。