【问题标题】:How do I get the output of Erlang's preprocessor?如何获得 Erlang 预处理器的输出?
【发布时间】: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


【解决方案1】:

尝试以下方法之一:

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

【讨论】:

  • 那些返回 error 并且不生成任何输出(使用我的错误宏;如果我没有任何错误,E 会做得很好)。
  • @nmichaels 如果编译时没有错误,该怎么做才能看到处理器输出?
猜你喜欢
  • 1970-01-01
  • 2011-04-14
  • 2011-08-21
  • 2012-06-02
  • 1970-01-01
  • 2021-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多