Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 解析xpath表达式_C++_Python_Parsing_Xpath_Lexer - Fatal编程技术网

C++ 解析xpath表达式

C++ 解析xpath表达式,c++,python,parsing,xpath,lexer,C++,Python,Parsing,Xpath,Lexer,我想解析XPath表达式 我在C++或Python 中寻找一个Loxe/PrScript实现 以下是我收集的有关XPath解析器的所有信息: XPath 1和2的ANTLR语法(来自) Python解析器和lexer 来自的几个python实现 有人知道其他实现吗?在C++中?< /P> PS:我不想对XPath表达式求值,而是要对它们进行标记 Xerces有一个分支xalan-c,用于执行此操作: 根据OP的评论 我正在研究XPath查询的重写和等价性 他需要的是一个构建抽象语法树的解析器

我想解析XPath表达式 我在C++或Python

中寻找一个Loxe/PrScript实现 以下是我收集的有关XPath解析器的所有信息:

  • XPath 1和2的ANTLR语法(来自)
  • Python解析器和lexer
  • 来自的几个python实现
有人知道其他实现吗?在C++中?< /P> PS:我不想对XPath表达式求值,而是要对它们进行标记

Xerces有一个分支xalan-c,用于执行此操作:


根据OP的评论

我正在研究XPath查询的重写和等价性

他需要的是一个构建抽象语法树的解析器,以及分析和转换这些树的方法。然后,通过遍历/修改AST,可以按程序完成分析器和“重写”;这是传统的做法

但似乎重点应该是OP的目标。为此,他需要分析和改写。但这不必完全按照传统的程序方式来完成。相反,如果可以直接使用XPath表示法进行分析/重写就更好了


我建议他看看我们的代码,它解析、构建AST,但特别是使用表面语法在AST上启用“重写”。然后XPath“重写”可以直接作为XPath表达式上的等价项编写。这是一个激励性的例子。从该示例中可以明显看出,XPath的语法很容易定义。

您想要一个分析XPath表达式的解决方案,还是一个针对特定XML文档对其求值的解决方案?@robert:我不想对XPath表达式求值,只是对其进行标记。所以,是的,我想要一个对XPath表达式进行lexes/parses分析的解决方案,首先你说“justtokenise”,然后你马上说“lexes/parses”。这些是非常不同的要求。我不清楚你是否清楚自己的需求。你到底想用XPath信息做什么?为什么?@IraBaxter:你说得对,我还不清楚。我不想对XML文档上的XPath表达式求值。我希望将xpath表达式表示为抽象语法树(类似于我用于算术表达式的树表示),以便对它们进行操作。我可以使用XPath语法编写自己的解析器。但在重新发明轮子之前,我只想知道是否有人已经完成了这项工作:)我正在研究XPath查询重写和等价。@Patrick:如果你想“重写”,你需要的不仅仅是标记化。您需要一个完整的解析器来构建AST。理想情况下,您还可以使用其他机器来帮助您进行重写,否则您也将花费大量的工作来构建它。我同意xquery/xslt引擎(如XQilla)中有一个xpath解析器/词法分析器。但我只需要解析器,不需要整个引擎,我同意xquery/xslt引擎(如Xerces)中有xpath解析器/lexer。但我只需要解析器,不需要整个引擎。我想要一个简单的API,在一系列位置步骤中标记XPath查询。将XPath表达式转换为XML意味着首先解析XPath表达式!