デバッグしている奇妙なマクロがあり、プリプロセッサの出力を取得する方法がわからないようです。私はGCCの-save-temps
と同等のものを探しています。私はdpp
をcompile:file/2
に渡そうとしましたが、解析されたErlangではなく、解析ツリーを生成するようです。Erlangのプリプロセッサの出力を取得するにはどうすればよいですか?
compile:file("t.erl", 'E').
Antonさんが述べたように素晴らしいですが、構文エラーの原因となるマクロは役に立ちません。複雑なマクロをデバッグする方法がないので、私はコードを生成するプログラムを書くことで自分のメタプログラミングを行うことに傾いています。
あなたが指摘するように、それだけでパースエラーが発生することなく、ファイルのために働く、ので、あなたが直接コンパイラ・インタフェースを使用することはできません。ただし、eppモジュール(Erlangプリプロセッサ)を直接呼び出して、マクロを展開した後に返されるトークンを返すことができます。 'epp:scan_erl_form/1'(文書化されていませんが、間違いなく安全*)という素晴らしい機能があります。これは' epp:parse_erl_form/1'とほとんど同じように動作しますが、解析はしません。もちろん、コードを生成することは間違いなく面白いです。もしあなたがLispプログラマであれば、LFE(Lisp Flavored Erlang)を使ってみてください。 – rvirding