2011-03-25 55 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聲明式派生而來的。