编译的 XPath 查询通常使用什么样的数据结构?只是 AST 还是其他什么?如果是的话,DOM 中的搜索通常是如何实现的?它只是使用部分查询 AST 在 DOM 中进行深度优先搜索吗?
不同处理器的情况会有很大差异。有些可能是纯解释器,有些编译为 Java 字节码或类似的。开源处理器有很多,我建议你研究一下。
处理器通常会从构建语法树开始,然后进行各种语义检查,例如声明变量,然后对树进行某种装饰(例如,添加从静态类型推断派生的信息),然后进行各种树重写优化,例如常量折叠(常量子表达式的预评估)或循环提升,然后使用解释器模式来评估结果。
更快的处理器不会直接搜索 DOM,而是构建树的索引表示,这对于搜索和导航来说更有效。