Chciałbym móc uzyskać AST dla danego programu OCaml (chciałbym iść AST i wygenerować oprzyrządowaną wersję kodu lub na przykład dokonać jakiejś transformacji). Czy któreś z narzędzi OCaml obsługuje tę funkcję?Czy to możliwe, aby uzyskać AST dla programu OCaml?
Odpowiedz
camlp4 to droga. Oto motivating example. Dokumenty są skąpe - prawda, ale można sobie pozwolić na czytanie poprzez wiki, istniejące przykłady, tutorials, a może nawet źródła camlp4.
To, czego szukasz, to [camlp4] [1]. Nie korzystałem wcześniej z camlp4, więc nie mogę potwierdzić jego zalet jako oprogramowania. Słyszałem o ludziach używających camlp5 [http://pauillac.inria.fr/~ddr/camlp5/] które, według Wikipedii, ma lepszą dokumentację niż aktualna wersja camlp4.
Myślałem, że camlp4 został użyty do modyfikacji i dostosowania składni OCaml, ale przypuszczam, że ma to sens, że może jakoś dotrzeć do AST. – aneccodeal
Od czasu OCaml 4.02.1 można to zrobić, korzystając z PPX tools written bu Alain Frisch. Przykład:
% ocamlfind ppx_tools/dumpast -e "1 + 2"
1 + 2
==>
{pexp_desc =
Pexp_apply ({pexp_desc = Pexp_ident {txt = Lident "+"}},
[("", {pexp_desc = Pexp_constant (Const_int 1)});
("", {pexp_desc = Pexp_constant (Const_int 2)})])}
=========
Jest możliwość korzystania z tego programu zrzucić AST normalnego pliku z kodem, jak również i różne opcje kontrolować stopień dokładności wysypisko. W powyższym przykładzie, na przykład, parametry lokalizacji AST są ukryte.
Możesz użyć compiler-libs
, aby to osiągnąć. Zobacz Parsetree
, Asttypes
i Ast_helper
.
Co robi ten motywujący przykład? – aneccodeal
Wstawianie wywołań co Camlp4prof.count (czytaj "dowolne") funkcja na początku każdej przeanalizowanej definicji funkcji przekazującej parametry nazwy i lokalizacji. – ygrek
Aktywna dyskusja na temat zasobów do nauki camlp4: http://groups.google.com/group/fa.caml/browse_thread/thread/1751a2c308742ac3?hl=en – nlucaroni