2011-03-25 97 views
7

我需要对QML格式文件(wiki)做一些静态分析,但是我找不到任何解析器。我看到的唯一方法是重用Qt Declarative模块的源代码或编写我自己的解析器。我在网上找不到任何东西。任何人都可以指向我的某个工具,转换为XML或Perl/Python模块来轻松解析QML文件中的元素?寻找QML格式文件解析器

非常感谢您的帮助!

+0

是否有理由不使用来自QT声明模块的代码?我会避免写一个解析器,理由是你不可能知道确切的语法(除非它隐藏在某处的Qt源文件中)。 – 2011-03-26 01:04:13

+0

这是可能的解决方案之一,但我的首选语言是Perl和Python,我会尽量避免在我的项目中编写C++代码。另外,我不想依赖Qt来在可能没有安装它的服务器上运行分析。 – aponomarenko 2011-03-26 01:34:37

+1

虽然该语法缺少空白信息和分号相同的行属性声明,但还是有[语法错误](https://bugreports.qt.io/browse/QTBUG-12602)的语法,所以这并不完美。 – Phrogz 2016-04-28 17:26:05

回答

3

您可以查看SDK附带的QML Viewer的源代码。 source code可在Gitorious上找到。 QML查看器代码使用C++而不是Python或Perl。

另一种可能的解决方案是,使用与Qt无关的Python,使用标准的JavaScript解析器并对其进行修改,使其能够理解QML。从您提供的维基链接:

由于QML和JavaScript非常相似,几乎所有支持JavaScript的代码编辑器都可以完成这项工作。

我找到了pynarcissus这是一个Python解释器。也许你可以稍微修改它,以便它可以解释相关的QML文件?

+0

使用JavaScript解析器是一个绝妙的主意!谢谢! – aponomarenko 2011-03-26 02:40:11

6

qt-declarative中的解析器位于src/qml/qml/parser中,其中很大一部分是使用qlalr生成的(与前一个链接位置相同,但使用qlalr而不是qtdeclarative)。 您可能还想看看qt-creator src/libs/qmljs/parser中使用的解析器,该解析器是从qt声明式派生而来的。