2013-04-20 75 views
6

我是LLVM的新手。我的基本需求是解析Fortran代碼。通過查看LLVM網站,LLVM似乎可以用作解析代碼的庫。那麼我可以用它來分析Fortran代碼,並提取關於代碼(AST?)的信息嗎?我可以使用LLVM分析Fortran嗎?

+1

LLVM與*解析無關。您可以重用f2c中的解析器或其中一種antlr Fortran語法。或者只需編寫自己的解析器,Fortran非常簡單。 – 2013-04-27 15:41:07

+0

@ SK邏輯我已經開始使用Treetop編寫一個Fortran解析器來達到我的目的。 – 2013-04-29 01:32:40

回答

10

LLVM是一個編譯器後端。它唯一知道如何解析的是LLVM IR--一種設計爲從編程語言前端發出的中間語言。 LLVM的官方前端是Clang,它可以處理C,C++和ObjC。如果您對其他語言感興趣,還有DragonEgg,這是一個gcc的LLVM插件。它使用gcc的前端和LLVM作爲後端,因此它可以解析gcc知道如何解析的任何內容。我知道正在做的工作是讓它從Ada和Fortran生成正確的代碼。下面是從頁的摘錄:

現狀

  • 效果最好用gcc-4.6。
  • Fortran工作得很好。 Ada,C和C++也很好。 Ada在gcc-4.7上效果不佳。
  • 它可以編譯合理數量的Obj-C,Obj-C++和Go。
  • 它可以編譯簡單的Java程序,但它們不能正確執行(這是java前端不支持GCC的 LTO的結果)。
  • 調試信息很差。
+0

謝謝!那麼我可以使用DragonEgg作爲圖書館嗎?就像讓它解析Fortran代碼一樣,並要求它提供符號信息。 – 2013-04-20 12:35:53

+2

@LiDong:如果你只需要解析Fortran並獲取符號信息,也許你甚至不需要DragonEgg或LLVM。也許你只需要gcc來轉儲它的前端數據。我會四處尋找有關使用gcc做這件事的文檔。 – 2013-04-20 13:10:14

2

不,LLVM不是解析Fortran的庫。 LLVM是一個用於實現編譯器後端的庫。您需要自己編寫Fortran前端。

+1

或者使用寫過Fortran前端的其他人的工作,例如http://dragonegg.llvm.org – 2013-04-20 10:17:03

0

添加到禮Bendersky評論,你可以在「開始代碼生成前的輸出內部解析樹」使用-fdump - 解析樹選項gfortran的。

相關問題