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/2
。StartLine
是最初的行号,它应该是一个正整数。
另请参阅:
parse/2
,parse_file/2
,parse_form/2
,quick_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/2
,quick_parse_file/1
,erl_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/3
,parse_form/2
,quick_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/3
,quick_parse/2
,quick_parse_file/2
,quick_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_fail
是true
默认的。
另见:
parse_file/2
,quick_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/3
,parse_form/3
,quick_parse_form/2
。
tokens_to_string(Tokens::[term()]) -> string()
生成与给定标记序列相对应的字符串。该字符串可以重新标记以再次生成相同的标记列表。
richard@gmail.com