【发布时间】:2011-10-22 21:32:59
【问题描述】:
我正在调试一个奇怪的宏,但我似乎无法弄清楚如何获取预处理器的输出。我正在寻找相当于 GCC 的 -save-temps。我尝试将dpp 传递给compile:file/2,但它似乎生成了一个解析树,而不是预处理的Erlang。
compile:file("t.erl", 'E'). Anton 提到的很好,但对导致语法错误的宏没有帮助。由于缺乏调试复杂宏的方法,我倾向于通过编写生成代码的程序来进行元编程。
【问题讨论】:
-
您不能直接使用编译器接口,因为正如您所指出的,它仅适用于没有解析错误的文件。但是,您可以直接调用 epp 模块(Erlang 预处理器)并让它返回宏扩展后返回的令牌。有一个很好的函数叫做
epp:scan_erl_form/1(未记录但绝对安全),它的工作方式与epp:parse_erl_form/1大致相同,但没有解析。当然,生成代码肯定很有趣,如果您是 lisp 程序员,请尝试使用 LFE(Lisp Flavored Erlang),这样会更容易。
标签: erlang preprocessor