2013-04-20 99 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的。

相关问题