2011-03-04 54 views
7

我想從C代碼中獲取抽象語法樹(AST)到OCaml值,以便我可以用簡單的OCaml程序進一步處理解析的代碼。解析C到Ocaml

我曾想過要使用GCC,用鉤子獲取AST(在GIMPLE中),並將GIMPLE代碼轉換爲Ocaml。

但我想知道是否有另一種方式,或者如果有人做了類似的事情。 (我還沒有發現太多......)

我不想求助於使用CIL。它是C代碼的OCaml解析器,但它不包含GCC所有的所有優化。 (我特別需要比在CIL中實現的更深的別名分析)。

LLVM可以作爲一個好主意嗎?已經完成了嗎?

有什麼更好的想法嗎?

+3

解析!=優化。後者後來。 – delnan 2011-03-04 15:15:12

回答

9

如果您的CIL問題是提供的別名分析的精度,請看Frama-C。它基於CIL,但提供了一個適用於指針的precise value analysis。價值分析使其結果在模塊化體系結構內部可用。

+2

借調:CIL和Frama-C可能是您可能希望的最佳工具,Pascal Cuoq是合適的人選之一。 – gasche 2011-03-04 15:24:07

+0

但是如何爲GIMPLE代碼甚至LLVM代碼編寫解析器? 然後,我會在這些編譯器的所有優化之後偷看代碼*,並將AST解析爲一個OCaml值... 這是不可想象的嗎? – Daz 2011-03-04 23:31:20

+0

@Daz如果你走這條路,我會推薦LLVM。至少在幾年前,當我們做出自己的選擇時,GCC開發人員並沒有對Gimple的穩定性提供任何保證,事實上它正在從一個版本變爲另一個版本。我不確定你期望從中間語言優化中得到什麼樣的魔法,但對於Frama-C中的應用程序,跟蹤和規範化代碼比優化更重要(甚至只有這兩個很難同時沒有第三個)。 – 2011-03-04 23:46:50

0

解析C到Ocaml的其他選項是FrontC。它的描述如下:

FrontC是一個提供C語法分析器和詞法分析器的OCAML庫。結果是一個容易處理通常OCAML樹管理的句法樹。

它提供對ANSI C語法,old-C K & R樣式語法和標準GNU CC屬性的支持。

它還提供了一個C漂亮的打印機作爲使用的例子。