Me gustaría poder obtener el AST para un programa OCaml determinado (me gustaría recorrer el AST y generar una versión instrumentada del código o hacer algún tipo de transformación, por ejemplo). ¿Alguna de las herramientas OCaml admite esta funcionalidad?¿Es posible obtener el AST para un programa OCaml?
Respuesta
camlp4 es una manera de hacerlo. Aquí hay un motivating example. Los documentos son escasos, cierto, pero uno puede hacer su camino leyendo wiki, ejemplos existentes, tutorials, e incluso fuentes de camlp4.
Lo que estás buscando es [camlp4] [1]. No he usado camlp4 antes, así que no puedo dar fe de sus virtudes como software. He oído hablar de personas que usan camlp5 [http://pauillac.inria.fr/~ddr/camlp5/] que, de acuerdo con wikipedia, tiene una mejor documentación que la versión actual de camlp4.
Pensé que camlp4 se usó para modificar y personalizar la sintaxis de OCaml, pero supongo que tiene sentido que pueda llegar a la AST de alguna manera. – aneccodeal
Desde OCaml 4.02.1 es posible usar el PPX tools written bu Alain Frisch para hacer esto con precisión. Ejemplo:
% 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)})])}
=========
Es posible utilizar este programa para volcar el AST de un archivo de código normal, así, y varias opciones controlan el grado de precisión del vertedero. En el ejemplo anterior, por ejemplo, los parámetros de ubicación del AST están ocultos.
Puede usar compiler-libs
para lograrlo. Consulte Parsetree
, Asttypes
y Ast_helper
.
- 1. Obtener AST para C++?
- 2. Llamar a un programa externo desde OCaml
- 3. ¿Cómo rastrear un programa para la depuración en OCaml?
- 4. ¿Es posible utilizar tuberías en OCaml?
- 5. ¿Es posible usar OCaml en modo incrustado?
- 6. ¿Es posible alojar el CLR en un programa C?
- 7. ¿Cómo depurar/ejecutar un programa Ocaml paso a paso?
- 8. ¿programa para obtener ganancias?
- 9. Analizando C a Ocaml
- 10. ¿Es posible usar SYB para transformar el tipo?
- 11. Opción OCaml obtener
- 12. ¿Por qué este programa OCaml es más rápido que mi programa C?
- 13. API para comparar AST?
- 14. ¿Qué es una transformación AST?
- 15. ¿Es posible obtener un selector utilizando indexOf
- 16. ¿Es posible probar/capturar todo el programa C#?
- 17. Generación Scala AST para el método recursivo
- 18. ¿Es posible obtener el Hwnd de un control emergente WPF?
- 19. ¿Es posible el programa Fast C++, C# GUI?
- 20. ¿Es posible compilar un programa escrito en Python?
- 21. Usando el Eclipse AST
- 22. ¿El mejor diseño para generar código de un AST?
- 23. Patrón de visitante para AST
- 24. Analizador de Haskell para AST
- 25. ¿Hay un intérprete toploop mejorado para OCaml?
- 26. Eclipse para obtener el tiempo de ejecución del programa
- 27. Implementando goto en un ast
- 28. ¿Cómo construir manualmente un AST?
- 29. ¿El siguiente programa es un programa C99 estrictamente conforme?
- 30. ¿Es posible regenerar símbolos para un exe?
¿Qué hace ese ejemplo motivador? – aneccodeal
Insertar llamadas co Función Camlp4prof.count (leer "arbitrario") al comienzo de cada definición de función analizada que pasa nombre y parámetros de ubicación. – ygrek
Una discusión activa sobre los recursos para aprender camlp4: http://groups.google.com/group/fa.caml/browse_thread/thread/1751a2c308742ac3?hl=en – nlucaroni