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
.
- 1. Drukowanie OCaml AST jako OCaml Code
- 2. OCaml reprezentacja typu rekordu AST
- 3. Czy to możliwe, aby uzyskać GitHub zawartości Wiki github api
- 4. Czy to możliwe, aby uzyskać aktualny pojemnik Unity wewnątrz kontrolera
- 5. Czy to możliwe, aby utworzyć widok dla zapytania wkładki
- 6. czy możliwe jest odtworzenie interpolacji ciągów Pythona w ocaml?
- 7. Java OO: Czy to możliwe?
- 8. Jak uzyskać klang, aby zrzucić AST bez koloru?
- 9. Czy to możliwe, aby przekazać zmienne wąsami częściowego
- 10. XPath: czy jest to możliwe, aby połączyć zapytaniami
- 11. Wiązanie bazy danych dla OCaml?
- 12. Jakie biblioteki należy użyć, aby uzyskać lepszą obróbkę OCaml?
- 13. Czy to możliwe, aby określić port w ajax rozmowy
- 14. Czy to możliwe, aby przesłać pliki cookie w Android DownloadManager
- 15. Czy jest możliwe, aby uzyskać wszystkie wspólne apache na raz?
- 16. Czy to możliwe w LINQ?
- 17. Czy to możliwe w JSON?
- 18. Czy to możliwe z sql?
- 19. OCaml dla JVM. Czy jest jakiś?
- 20. INSTEAD OF UPDATE Trigger - czy to możliwe?
- 21. Czy to możliwe, aby włączyć debug dla procesu Java po uruchomieniu bez debugowania
- 22. Chciałbyś zmienić nieprzezroczystość dla NSPopover - czy to możliwe?
- 23. Jak uzyskać źródło odpowiadające węzłowi Python AST?
- 24. WPF z C++, czy to możliwe?
- 25. Definiowanie TH z klasą, czy to możliwe?
- 26. Mieszanie OCaml i C: czy to jest warte bólu?
- 27. Czy to możliwe, aby wdrożyć pakiet SSIS 2012 na SQL Server 2008
- 28. jak wyświetlić clang AST?
- 29. Co to ** soczewki ** w świecie OCaml
- 30. AST dla wielu plików źródłowych z clang
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