2011-10-19 17 views
7

Ho una macro strana che sto eseguendo il debug e non riesco a capire come ottenere l'output del preprocessore. Sto cercando l'equivalente di GCC -save-temps. Ho provato a passare dpp a compile:file/2, ma sembra generare un albero di analisi, non elaborato Erlang.Come ottengo l'output del preprocessore di Erlang?

compile:file("t.erl", 'E'). come indicato da Anton è ottimo, ma non aiuta con le macro che causano errori di sintassi. In mancanza di un modo per eseguire il debug di macro complicate, mi sto propendo per eseguire la metaprogrammazione scrivendo programmi che generano codice.

+1

Non è possibile utilizzare l'interfaccia compilatore direttamente perché, come fai notare, funziona solo per i file, senza errori di analisi. Tuttavia, è possibile chiamare direttamente il modulo epp (pre-processore Erlang) e farlo restituire i token restituiti dopo l'espansione dei macro. C'è una bella funzione chiamata 'epp: scan_erl_form/1' (non documentata ma sicuramente * safe *) che funziona allo stesso modo di' epp: parse_erl_form/1' ma senza analisi. Naturalmente la generazione del codice è sicuramente divertente, se sei un programmatore Lisp prova ad usare LFE (Lisp Flavored Erlang) che lo rende più facile. – rvirding

risposta

6

provare uno di questi:

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

Questi restituiscono 'error' e non generano alcun output (con la mia macro difettosa;' E' fa grandi cose se non ho errori). – nmichaels

+0

@nmichaels cosa fare per vedere l'output del processore se le cose non si compilano senza errori? – tMJ

Problemi correlati