epp_dodger

epp_dodger

模块

epp_dodger

模块摘要

epp_dodger - 绕过Erlang预处理器。

描述

epp_dodger - 绕过Erlang预处理器。

这个模块在不扩展预处理器指令和宏应用程序的情况下对大多数Erlang源代码进行标记和解析,只要这些代码在语法上“表现良好”即可。由于erl_parse模块的正常解析树不能表示这些东西(通常,epp(3)在解析器看到它们之前它们被Erlang预处理器扩展),所以使用该erl_syntax模块创建扩展语法树。

数据类型

errorinfo()= {ErrorLine::integer(),Module::atom(),Descriptor::term()}

这是一个所谓的Erlang I/O ErrorInfo结构; io(3)详情请参阅模块。

出口

parse(Dev::IODevice) -> {ok, Forms} | {error,errorinfo()}

相当于parse(IODevice, 1)

parse(Dev::IODevice, L::StartLine) -> {ok, Forms} | {error,errorinfo()}

类型

相当于parse(IODevice, StartLine, [])

另见: parse/1

parse(Dev::IODevice, L0::StartLine, Options) -> {ok, Forms} | {error,errorinfo()}

类型

从I/O流中读取和解析程序文本。读取字符IODevice直到文件结束; 除此之外,行为与之相同parse_file/2StartLine是最初的行号,它应该是一个正整数。

另请参阅: parse/2parse_file/2parse_form/2quick_parse/3

parse_file(File) -> {ok, Forms} | {error,errorinfo()}

类型

相当于parse_file(File, [])

parse_file(File, Options) -> {ok, Forms} | {error,errorinfo()}

类型

读取和解析文件。如果成功,{ok, Forms}则返回,Forms表示文件的“程序形式”(cf. erl_syntax:is_form/1)的抽象语法树的列表在哪里。否则,{error, errorinfo()}返回,通常如果文件无法打开。请注意,解析错误在返回的表单列表中显示为错误标记; 他们不会导致此功能失败或返回{error, errorinfo()}

备选方案:

{no_fail, boolean()}

如果true这代替了报告解析错误,代替了epp_dodger无法用类型text(见erl_syntax:text/1)类型的节点解析的任何程序表单,代表了表单的原始标记序列。默认值是false

{clever, boolean()}

如果设置为true,这将epp_dodger尝试修复源代码,因为它看起来合适,在某些情况下,解析会失败。目前,它++在字符串文字和宏之间插入-operator,看起来像是连接的意图。默认值是false

另请参阅: parse/2quick_parse_file/1erl_syntax:is_form/1

parse_form(Dev::IODevice, L0::StartLine) -> {ok, Form, LineNo} | {eof, LineNo} | {error,errorinfo(), LineNo}

类型

相当于parse_form(IODevice, StartLine, [])

另见: quick_parse_form/2

parse_form(Dev::IODevice, L0::StartLine, Options) -> {ok, Form, LineNo} | {eof, LineNo} | {error,errorinfo(), LineNo}

类型

从I/O流中读取和解析单个程序表单。从中读取字符,IODevice直到找到一个结束标记(一个句点字符后跟空白),或者直到文件结束; 除此之外,行为类似于parse/3,除了返回值还包含给定的最终行号StartLine并且{eof, LineNo}可能返回该行号。

另请参阅: parse/3parse_form/2quick_parse_form/3

quick_parse(Dev::IODevice) -> {ok, Forms} | {error,errorinfo()}

相当于quick_parse(IODevice, 1)

quick_parse(Dev::IODevice, L::StartLine) -> {ok, Forms} | {error,errorinfo()}

类型

相当于quick_parse(IODevice, StartLine, [])

另见: quick_parse/1

quick_parse(Dev::IODevice, L0::StartLine, Options) -> {ok, Forms} | {error,errorinfo()}

类型

与之类似parse/3,但对代码进行更快捷的处理。详情请参阅quick_parse_file/2

另请参阅: parse/3quick_parse/2quick_parse_file/2quick_parse_form/2

quick_parse_file(File) -> {ok, Forms} | {error,errorinfo()}

类型

相当于quick_parse_file(File, [])

quick_parse_file(File, Options) -> {ok, Forms} | {error,errorinfo()}

类型

与之类似parse_file/2,但对代码进行更快捷的处理。宏定义和其他预处理指令被放弃,所有的宏调用都被原子替换。当只有代码的主要结构是感兴趣的时候,这是非常有用的,而不是细节。而且,快速解析方法通常可以处理比正常更精确的解析更奇怪的情况。

选项:请参阅parse_file/2。但请注意quick_parse_file/2,该选项no_failtrue默认的。

另见: parse_file/2quick_parse/2

quick_parse_form(Dev::IODevice, L0::StartLine) -> {ok, Form, LineNo} | {eof, LineNo} | {error,errorinfo(), LineNo}

类型

相当于quick_parse_form(IODevice, StartLine, [])

另见: parse_form/2

quick_parse_form(Dev::IODevice, L0::StartLine, Options) -> {ok, Form, LineNo} | {eof, LineNo} | {error,errorinfo(), LineNo}

类型

与之类似parse_form/3,但对代码进行更快捷的处理。详情请参阅quick_parse_file/2

另请参阅: parse/3parse_form/3quick_parse_form/2

tokens_to_string(Tokens::[term()]) -> string()

生成与给定标记序列相对应的字符串。该字符串可以重新标记以再次生成相同的标记列表。

richard@gmail.com