2013-04-20 18 views
6

Jestem nowicjuszem w LLVM. Moją podstawową potrzebą jest zanalizowanie kodów Fortrana. Patrząc na stronę LLVM wydaje się, że LLVM może być wykorzystywana jako biblioteka do analizowania kodów. Czy mogę więc użyć go do analizy kodów Fortrana i wydobyć informacje o kodach (AST?)?Czy mogę użyć LLVM do analizowania Fortran?

+1

LLVM ma * nic * do zrobienia z parsowaniem. Możesz ponownie użyć parsera z f2c lub jednego z tych starszych gramatyk Fortran. Lub po prostu napisz swój własny parser, Fortran jest dość trywialny. –

+0

@ SK-logic Zacząłem pisać parser Fortran używając Treetop dla mojego celu. –

Odpowiedz

10

LLVM jest zapleczem kompilatora. Jedyne, co potrafi analizować, to LLVM IR - język pośredni przeznaczony do emitowania z programowania frontendów językowych. Oficjalnym interfejsem LLVM jest Clang, który może obsługiwać C, C++ i ObjC. Jeśli interesują Cię inne języki, jest też DragonEgg, która jest wtyczką LLVM dla gcc. Wykorzystuje front-end gcc i LLVM jako backend, więc może parsować wszystko, co gcc wie, jak parsować. Wiem, że trwają prace nad wygenerowaniem poprawnego kodu od Ada i Fortran. Oto fragment z jego strony:

Obecny status

  • najlepiej działa z gcc-4.6.
  • Fortran działa bardzo dobrze. Ada, C i C++ również działają dobrze. Ada działa słabo z gcc-4.7.
  • Może skompilować rozsądną ilość Obj-C, Obj-C++ i Go.
  • Potrafi skompilować proste programy Java, ale nie działają one poprawnie (jest to konsekwencją interfejsu front-end java, który nie obsługuje GCC LTO).
  • Informacje na temat debugowania są słabe.
+0

Dzięki! Czy mogę używać DragonEgg jako biblioteki? Tak jak niech parsuje kod Fortrana i pytaj go o informacje o symbolu. –

+2

@LiDong: Jeśli potrzebujesz tylko analizować Fortran i uzyskać informacje o symbolu, być może nie potrzebujesz nawet DragonEgg lub LLVM. Być może potrzebujesz tylko gcc, aby zrzucić swoje dane front-end. Rozglądałbym się za dokumentacją tego z gcc. –

2

Nie, LLVM nie jest biblioteką do analizowania Fortran. LLVM to biblioteka do implementacji zaplecza kompilatora. Trzeba by napisać sam Frontrad.

+1

Lub skorzystaj z pracy kogoś, kto napisał frontran z Fortranu, na przykład http://dragonegg.llvm.org –

0

Dodawanie do Eli Bendersky komentarza, można użyć opcji -fdump-parse-drzewo w gfortran dla „wyjście na wewnętrzny drzewa parsującej przed rozpoczęciem generowania kodu”.

Powiązane problemy