2011-10-19 16 views
7

Tengo una macro extraña que estoy depurando y parece que no puedo encontrar la forma de obtener la salida del preprocesador. Estoy buscando el equivalente de -save-temps de GCC. He intentado pasar dpp a compile:file/2, pero parece generar un árbol de análisis sintáctico, no preprocesado Erlang.¿Cómo obtengo la salida del preprocesador de Erlang?

compile:file("t.erl", 'E'). como lo menciona Anton es excelente, pero no ayuda con las macros que causan errores de sintaxis. Al carecer de una forma de depurar macros complicadas, me inclino por hacer mi metaprogramación escribiendo programas que generan código.

+1

No se puede utilizar la interfaz de compilador directamente porque, como usted señala, sólo funciona para archivos sin errores de análisis. Sin embargo, puede llamar al módulo epp (preprocesador Erlang) directamente y hacer que devuelva los tokens devueltos después de que se hayan expandido las macros. Hay una bonita función llamada 'epp: scan_erl_form/1' (no documentada pero definitivamente * segura *) que funciona de forma muy similar a' epp: parse_erl_form/1' pero sin analizar. Por supuesto, la generación de código es definitivamente divertida, si eres un programador de lisp prueba usar LFE (Lisp Flavored Erlang) que lo hace más fácil. – rvirding

Respuesta

6

probar uno de estos:

compile:file("t.erl", 'P'). 
    compile:file("t.erl", 'E'). 
+2

Esos devuelven 'error' y no generan ninguna salida (con mi macro defectuosa;' E' hace cosas buenas si no tengo ningún error). – nmichaels

+0

@nmichaels ¿qué hacer para ver la salida del procesador si las cosas no se compilan sin errores? – tMJ

Cuestiones relacionadas