查看源代码 erl_id_trans (stdlib v6.2)
此模块执行 Erlang 代码的标识解析转换。
它作为用户想要编写自己的解析转换器的示例。如果将选项 {parse_transform,Module}
传递给编译器,则在检查代码是否存在错误之前,编译器会调用用户编写的函数 parse_transform/2
。
在调用函数 parse_transform/2
之前,Erlang 编译器会检查解析转换是否可以处理带有列号的抽象代码:如果实现了函数 parse_transform_info/0
并返回一个映射,其中键 error_location
与值 line
相关联,则编译器会在调用解析转换之前从抽象代码中删除列号。否则,编译器会直接传递抽象代码而不进行修改。
解析转换
如果程序员想要使用 Erlang 语法,但具有不同的语义,则可以使用解析转换。然后将原始 Erlang 代码转换为其他 Erlang 代码。
注意
强烈建议程序员不要进行解析转换。对于遇到的问题,我们不提供任何支持。
另请参阅
摘要
函数
-spec parse_transform(Forms, Options) -> NewForms when Forms :: [erl_parse:abstract_form() | erl_parse:form_info()], NewForms :: Forms, Options :: [compile:option()].
作为示例,对 Erlang 形式执行标识转换。
-spec parse_transform_info() -> #{error_location => column | line}.
返回有关解析转换本身的信息。