2011-10-19 10 views
7

デバッグしている奇妙なマクロがあり、プリプロセッサの出力を取得する方法がわからないようです。私はGCCの-save-tempsと同等のものを探しています。私はdppcompile:file/2に渡そうとしましたが、解析されたErlangではなく、解析ツリーを生成するようです。Erlangのプリプロセッサの出力を取得するにはどうすればよいですか?

compile:file("t.erl", 'E'). Antonさんが述べたように素晴らしいですが、構文エラーの原因となるマクロは役に立ちません。複雑なマクロをデバッグする方法がないので、私はコードを生成するプログラムを書くことで自分のメタプログラミングを行うことに傾いています。

+1

あなたが指摘するように、それだけでパースエラーが発生することなく、ファイルのために働く、ので、あなたが直接コンパイラ・インタフェースを使用することはできません。ただし、eppモジュール(Erlangプリプロセッサ)を直接呼び出して、マクロを展開した後に返されるトークンを返すことができます。 'epp:scan_erl_form/1'(文書化されていませんが、間違いなく安全*)という素晴らしい機能があります。これは' epp:parse_erl_form/1'とほとんど同じように動作しますが、解析はしません。もちろん、コードを生成することは間違いなく面白いです。もしあなたがLispプログラマであれば、LFE(Lisp Flavored Erlang)を使ってみてください。 – rvirding

答えて

6

は、これらのいずれかを試してみてください。

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

これらは 'error'を返し、出力を生成しません(私の欠陥マクロで、' E'はエラーがなければ素晴らしいことをします)。 – nmichaels

+0

@nmichaelsエラーが発生してもコンパイルされない場合は、プロセッサの出力を表示するにはどうすればよいですか? – tMJ

関連する問題