查看源代码 epp_dodger (syntax_tools v3.2.1)

绕过 Erlang 预处理器。

这个模块对大多数 Erlang 源代码进行标记化和解析,而不扩展预处理器指令和宏应用,只要它们在语法上“行为良好”。因为 erl_parse 模块的普通解析树不能表示这些东西(通常,它们在解析器看到它们之前会被 Erlang 预处理器 //stdlib/epp 扩展),所以会创建一个扩展的语法树,使用 erl_syntax 模块。

摘要

函数

从 I/O 流读取和解析程序文本。

读取和解析文件。

从 I/O 流读取和解析单个程序形式。

类似于 parse/3,但对代码进行更快速和粗略的处理。

类似于 parse_file/2,但对代码进行更快速和粗略的处理。

类似于 parse_form/3,但对代码进行更快速和粗略的处理。有关详细信息,请参阅 quick_parse_file/2

生成与给定标记序列对应的字符串。

类型

链接到此类型

errorinfo()

查看源代码 (未导出)
-type errorinfo() :: erl_scan:error_info().
链接到此类型

option()

查看源代码 (未导出)
-type option() :: atom() | {atom(), term()}.

函数

-spec parse(file:io_device()) -> {ok, erl_syntax:forms()}.

等价于 parse(IODevice, 1)

-spec parse(file:io_device(), erl_anno:location()) -> {ok, erl_syntax:forms()}.

等价于 parse(IODevice, StartLocation, [])

链接到此函数

parse(Dev, L0, Options)

查看源代码
-spec parse(file:io_device(), erl_anno:location(), [option()]) -> {ok, erl_syntax:forms()}.

从 I/O 流读取和解析程序文本。

IODevice 读取字符直到文件末尾;除此之外,其行为与 parse_file/2 相同。StartLocation 是初始位置。

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

-spec parse_file(file:filename()) -> {ok, erl_syntax:forms()} | {error, errorinfo()}.

等价于 parse_file(File, [])

链接到此函数

parse_file(File, Options)

查看源代码
-spec parse_file(file:filename(), [option()]) -> {ok, erl_syntax:forms()} | {error, errorinfo()}.

读取和解析文件。

如果成功,则返回 {ok, Forms},其中 Forms 是表示文件“程序形式”的抽象语法树列表(请参阅 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 在某些情况下尝试修复源代码,使其看起来合适,在其他情况下解析会失败。目前,它会在字符串文字和宏之间插入 ++ 运算符,其中看起来像是打算进行连接。默认值为 false

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

-spec parse_form(file:io_device(), erl_anno:location()) ->
                    {ok, erl_syntax:forms(), erl_anno:location()} |
                    {eof, erl_anno:location()} |
                    {error, errorinfo(), erl_anno:location()}.

等价于 parse_form(IODevice, StartLocation, [])

链接到此函数

parse_form(Dev, L0, Options)

查看源代码
-spec parse_form(file:io_device(), erl_anno:location(), [option()]) ->
                    {ok, erl_syntax:forms(), erl_anno:location()} |
                    {eof, erl_anno:location()} |
                    {error, errorinfo(), erl_anno:location()}.

从 I/O 流读取和解析单个程序形式。

IODevice 读取字符,直到找到表单结束标记(一个句点字符后跟空格),或直到文件末尾;除此之外,其行为类似于 parse/3,不同之处在于返回值还包含给定 StartLocation 为初始位置时的最终位置,并且可以返回 {eof, Location}

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

-spec quick_parse(file:io_device()) -> {ok, erl_syntax:forms()}.

等价于 quick_parse(IODevice, 1)

-spec quick_parse(file:io_device(), erl_anno:location()) -> {ok, erl_syntax:forms()}.

等价于 quick_parse(IODevice, StartLocation, [])

链接到此函数

quick_parse(Dev, L0, Options)

查看源代码
-spec quick_parse(file:io_device(), erl_anno:location(), [option()]) -> {ok, erl_syntax:forms()}.

类似于 parse/3,但对代码进行更快速和粗略的处理。

有关详细信息,请参阅 quick_parse_file/2

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

链接到此函数

quick_parse_file(File)

查看源代码
-spec quick_parse_file(file:filename()) -> {ok, erl_syntax:forms()} | {error, errorinfo()}.

等价于 quick_parse_file(File, [])

链接到此函数

quick_parse_file(File, Options)

查看源代码
-spec quick_parse_file(file:filename(), [option()]) -> {ok, erl_syntax:forms()} | {error, errorinfo()}.

类似于 parse_file/2,但对代码进行更快速和粗略的处理。

宏定义和其他预处理器指令将被丢弃,所有宏调用都将替换为原子。当只对代码的主要结构感兴趣,而不是细节时,这很有用。此外,快速解析方法通常可以处理比正常的、更精确的解析更多的奇怪情况。

选项:请参阅 parse_file/2。但是,请注意,对于 quick_parse_file/2,选项 no_fail 默认为 true

另请参阅:parse_file/2quick_parse/2

链接到此函数

quick_parse_form(Dev, L0)

查看源代码
-spec quick_parse_form(file:io_device(), erl_anno:location()) ->
                          {ok, erl_syntax:forms(), erl_anno:location()} |
                          {eof, erl_anno:location()} |
                          {error, errorinfo(), erl_anno:location()}.

等价于 quick_parse_form(IODevice, StartLocation, [])

链接到此函数

quick_parse_form(Dev, L0, Options)

查看源代码
-spec quick_parse_form(file:io_device(), erl_anno:location(), [option()]) ->
                          {ok, erl_syntax:forms(), erl_anno:location()} |
                          {eof, erl_anno:location()} |
                          {error, errorinfo(), erl_anno:location()}.

类似于 parse_form/3,但对代码进行更快速和粗略的处理。有关详细信息,请参阅 quick_parse_file/2

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

-spec tokens_to_string([term()]) -> string().

生成与给定标记序列对应的字符串。

字符串可以重新标记化以再次产生相同的标记列表。