查看源代码 epp (stdlib v6.2)

一个 Erlang 代码预处理器。

Erlang 代码预处理器包含 compile 模块使用的函数,用于在解析发生之前预处理宏和包含文件。

Erlang 源文件 编码 由源文件的前两行中的注释选择。第一个匹配正则表达式 coding\s*[:=]\s*([-a-zA-Z0-9])+ 的字符串选择编码。如果匹配的字符串不是有效的编码,则将其忽略。有效的编码为 Latin-1UTF-8,其中字符的大小写可以自由选择。

示例

%% coding: utf-8
%% For this file we have chosen encoding = Latin-1
%% -*- coding: latin-1 -*-

错误信息

ErrorInfo 是所有 I/O 模块返回的标准 ErrorInfo 结构。格式如下

{ErrorLine, Module, ErrorDescriptor}

使用以下调用获取描述错误的字符串

Module:format_error(ErrorDescriptor)

另请参阅

erl_parse

摘要

类型

指向 epp 服务器的句柄。

函数

关闭文件的预处理。

返回 Erlang 源文件的默认编码。

返回编码的字符串表示形式。该字符串可被 read_encoding/1,2read_encoding_from_binary/1,2set_encoding/1,2 识别为有效编码。

接受一个 ErrorDescriptor 并返回描述错误或警告的字符串。在处理 ErrorInfo 结构时(请参阅错误信息部分),通常会隐式调用此函数。

打开一个文件进行预处理。

等效于 epp:open([{name, FileName}, {includes, IncludePath}])

等效于 epp:open([{name, FileName}, {includes, IncludePath}, {macros, PredefMacros}])

从打开的 Erlang 源文件返回下一个 Erlang 形式。在文件末尾返回元组 {eof, Location}。第一个形式对应于隐式属性 -file(File,1).,其中 File 是文件名。

预处理并解析 Erlang 源文件。请注意,在文件末尾返回的元组 {eof, Location} 作为“形式”包含在内。

等效于 epp:parse_file(FileName, [{includes, IncludePath}, {macros, PredefMacros}])

从文件中读取 编码。返回读取的编码,如果没有找到有效的编码,则返回 none

从二进制文件中读取 编码。返回读取的编码,如果没有找到有效的编码,则返回 none

从打开的 Erlang 源文件返回下一个 Erlang 形式的原始标记。在文件末尾返回元组 {eof, Line}。第一个形式对应于隐式属性 -file(File,1).,其中 File 是文件名。

预处理 Erlang 源文件,返回每个形式的原始标记列表的列表。请注意,在文件末尾返回的元组 {eof, Line} 作为“形式”包含在内,并且任何扫描形式失败都作为元组 {error, ErrorInfo} 包含在列表中。

从 I/O 设备读取 编码,并相应地设置设备的编码。由 File 引用的 I/O 设备的位置不受影响。如果无法从 I/O 设备读取有效编码,则将 I/O 设备的编码设置为默认编码。

从 I/O 设备读取 编码,并相应地设置设备的编码。由 File 引用的 I/O 设备的位置不受影响。如果无法从 I/O 设备读取有效编码,则将 I/O 设备的编码设置为由 Default 指定的 编码

类型

链接到此类型

epp_handle()

查看源代码 (未导出)
-type epp_handle() :: pid().

指向 epp 服务器的句柄。

-type macros() :: [atom() | {atom(), term()} | {atom(), term(), redefine}].
-type source_encoding() :: latin1 | utf8.
链接到此类型

warning_info()

查看源代码 (未导出)
-type warning_info() :: {erl_anno:location(), module(), term()}.

函数

-spec close(Epp) -> ok when Epp :: epp_handle().

关闭文件的预处理。

链接到此函数

default_encoding()

查看源代码 (自 OTP R16B 起)
-spec default_encoding() -> source_encoding().

返回 Erlang 源文件的默认编码。

链接到此函数

encoding_to_string(Encoding)

查看源代码 (自 OTP R16B 起)
-spec encoding_to_string(Encoding) -> string() when Encoding :: source_encoding().

返回编码的字符串表示形式。该字符串可被 read_encoding/1,2read_encoding_from_binary/1,2set_encoding/1,2 识别为有效编码。

链接到此函数

format_error(ErrorDescriptor)

查看源代码 (自 OTP R14B03 起)
-spec format_error(ErrorDescriptor) -> io_lib:chars() when ErrorDescriptor :: term().

接受一个 ErrorDescriptor 并返回描述错误或警告的字符串。在处理 ErrorInfo 结构时(请参阅错误信息部分),通常会隐式调用此函数。

链接到此函数

open(Options)

查看源代码 (自 OTP 17.0 起)
-spec open(Options) -> {ok, Epp} | {ok, Epp, Extra} | {error, ErrorDescriptor}
              when
                  Options ::
                      [{default_encoding, DefEncoding :: source_encoding()} |
                       {includes, IncludePath :: [DirectoryName :: file:name()]} |
                       {source_name, SourceName :: file:name()} |
                       {deterministic, Enabled :: boolean()} |
                       {macros, PredefMacros :: macros()} |
                       {name, FileName :: file:name()} |
                       {location, StartLocation :: erl_anno:location()} |
                       {fd, FileDescriptor :: file:io_device()} |
                       extra |
                       {compiler_internal, [term()]}],
                  Epp :: epp_handle(),
                  Extra :: [{encoding, source_encoding() | none}],
                  ErrorDescriptor :: term().

打开一个文件进行预处理。

如果要更改预处理期间插入的隐式 -file() 属性的文件名,可以使用 {source_name, SourceName}。如果未设置,则默认为打开的文件名。

设置 {deterministic, Enabled} 将额外地将预处理期间插入的隐式 -file() 属性的文件名缩减为仅路径的基本名称。

如果在 Options 中指定了 extra,则返回值是 {ok, Epp, Extra} 而不是 {ok, Epp}

选项 location 将转发到 Erlang 标记扫描器,请参阅 erl_scan:tokens/3,4

{compiler_internal,term()} 选项将转发到 Erlang 标记扫描器,请参阅 {compiler_internal,term()}

链接到此函数

open(FileName, IncludePath)

查看源代码
-spec open(FileName, IncludePath) -> {ok, Epp} | {error, ErrorDescriptor}
              when
                  FileName :: file:name(),
                  IncludePath :: [DirectoryName :: file:name()],
                  Epp :: epp_handle(),
                  ErrorDescriptor :: term().

等效于 epp:open([{name, FileName}, {includes, IncludePath}])

链接到此函数

open(FileName, IncludePath, PredefMacros)

查看源代码
-spec open(FileName, IncludePath, PredefMacros) -> {ok, Epp} | {error, ErrorDescriptor}
              when
                  FileName :: file:name(),
                  IncludePath :: [DirectoryName :: file:name()],
                  PredefMacros :: macros(),
                  Epp :: epp_handle(),
                  ErrorDescriptor :: term().

等效于 epp:open([{name, FileName}, {includes, IncludePath}, {macros, PredefMacros}])

-spec parse_erl_form(Epp) ->
                        {ok, AbsForm} | {error, ErrorInfo} | {warning, WarningInfo} | {eof, Location}
                        when
                            Epp :: epp_handle(),
                            AbsForm :: erl_parse:abstract_form(),
                            Location :: erl_anno:location(),
                            ErrorInfo :: erl_scan:error_info() | erl_parse:error_info(),
                            WarningInfo :: warning_info().

从打开的 Erlang 源文件返回下一个 Erlang 形式。在文件末尾返回元组 {eof, Location}。第一个形式对应于隐式属性 -file(File,1).,其中 File 是文件名。

链接到此函数

parse_file(FileName, Options)

查看源代码 (自 OTP 17.0 起)
-spec parse_file(FileName, Options) -> {ok, [Form]} | {ok, [Form], Extra} | {error, OpenError}
                    when
                        FileName :: file:name(),
                        Options ::
                            [{includes, IncludePath :: [DirectoryName :: file:name()]} |
                             {source_name, SourceName :: file:name()} |
                             {macros, PredefMacros :: macros()} |
                             {default_encoding, DefEncoding :: source_encoding()} |
                             {location, StartLocation :: erl_anno:location()} |
                             {reserved_word_fun, Fun :: fun((atom()) -> boolean())} |
                             {features, [Feature :: atom()]} |
                             extra |
                             {compiler_internal, [term()]}],
                        Form :: erl_parse:abstract_form() | {error, ErrorInfo} | {eof, Location},
                        Location :: erl_anno:location(),
                        ErrorInfo :: erl_scan:error_info() | erl_parse:error_info(),
                        Extra :: [{encoding, source_encoding() | none}],
                        OpenError :: file:posix() | badarg | system_limit.

预处理并解析 Erlang 源文件。请注意,在文件末尾返回的元组 {eof, Location} 作为“形式”包含在内。

如果要更改预处理期间插入的隐式 -file() 属性的文件名,可以使用 {source_name, SourceName}。如果未设置,则默认为打开的文件名。

如果在 Options 中指定了 extra,则返回值是 {ok, [Form], Extra} 而不是 {ok, [Form]}

选项 location 将转发到 Erlang 标记扫描器,请参阅 erl_scan:tokens/3,4

{compiler_internal,term()} 选项将转发到 Erlang 标记扫描器,请参阅 {compiler_internal,term()}

链接到此函数

parse_file(FileName, IncludePath, PredefMacros)

查看源代码
-spec parse_file(FileName, IncludePath, PredefMacros) -> {ok, [Form]} | {error, OpenError}
                    when
                        FileName :: file:name(),
                        IncludePath :: [DirectoryName :: file:name()],
                        Form :: erl_parse:abstract_form() | {error, ErrorInfo} | {eof, Location},
                        PredefMacros :: macros(),
                        Location :: erl_anno:location(),
                        ErrorInfo :: erl_scan:error_info() | erl_parse:error_info(),
                        OpenError :: file:posix() | badarg | system_limit.

等效于 epp:parse_file(FileName, [{includes, IncludePath}, {macros, PredefMacros}])

链接到此函数

read_encoding(FileName)

查看源代码 (自 OTP R16B 起)
-spec read_encoding(FileName) -> source_encoding() | none when FileName :: file:name().

等效于 read_encoding/2

链接到此函数

read_encoding(FileName, Options)

查看源代码 (自 OTP R16B 起)
-spec read_encoding(FileName, Options) -> source_encoding() | none
                       when
                           FileName :: file:name(),
                           Options :: [Option],
                           Option :: {in_comment_only, boolean()}.

从文件中读取 编码。返回读取的编码,如果没有找到有效的编码,则返回 none

默认情况下,选项 in_comment_onlytrue,这对于 Erlang 源文件是正确的。如果设置为 false,则编码字符串不一定必须出现在注释中。

链接到此函数

read_encoding_from_binary(Binary)

查看源代码 (自 OTP R16B 起)
-spec read_encoding_from_binary(Binary) -> source_encoding() | none when Binary :: binary().

等效于 read_encoding_from_binary/2

链接到此函数

read_encoding_from_binary(Binary, Options)

查看源代码 (自 OTP R16B 起)
-spec read_encoding_from_binary(Binary, Options) -> source_encoding() | none
                                   when
                                       Binary :: binary(),
                                       Options :: [Option],
                                       Option :: {in_comment_only, boolean()}.

从二进制文件中读取 编码。返回读取的编码,如果没有找到有效的编码,则返回 none

默认情况下,选项 in_comment_onlytrue,这对于 Erlang 源文件是正确的。如果设置为 false,则编码字符串不一定必须出现在注释中。

链接到此函数

scan_erl_form(Epp)

查看源代码 (自 OTP R13B03 起)
-spec scan_erl_form(Epp) -> {ok, Tokens} | {error, ErrorInfo} | {warning, WarningInfo} | {eof, Line}
                       when
                           Epp :: epp_handle(),
                           Tokens :: erl_scan:tokens(),
                           Line :: erl_anno:line(),
                           ErrorInfo :: erl_scan:error_info() | erl_parse:error_info(),
                           WarningInfo :: warning_info().

从打开的 Erlang 源文件返回下一个 Erlang 形式的原始标记。在文件末尾返回元组 {eof, Line}。第一个形式对应于隐式属性 -file(File,1).,其中 File 是文件名。

链接到此函数

scan_file(FileName, Options)

查看源代码 (自 OTP 24.0 起)
-spec scan_file(FileName, Options) -> {ok, [Form], Extra} | {error, OpenError}
                   when
                       FileName :: file:name(),
                       Options ::
                           [{includes, IncludePath :: [DirectoryName :: file:name()]} |
                            {source_name, SourceName :: file:name()} |
                            {macros, PredefMacros :: macros()} |
                            {default_encoding, DefEncoding :: source_encoding()}],
                       Form :: erl_scan:tokens() | {error, ErrorInfo} | {eof, Loc},
                       Loc :: erl_anno:location(),
                       ErrorInfo :: erl_scan:error_info(),
                       Extra :: [{encoding, source_encoding() | none}],
                       OpenError :: file:posix() | badarg | system_limit.

预处理 Erlang 源文件,返回每个形式的原始标记列表的列表。请注意,在文件末尾返回的元组 {eof, Line} 作为“形式”包含在内,并且任何扫描形式失败都作为元组 {error, ErrorInfo} 包含在列表中。

链接到此函数

set_encoding(File)

查看源代码 (自 OTP R16B 起)
-spec set_encoding(File) -> source_encoding() | none when File :: io:device().

从 I/O 设备读取 编码,并相应地设置设备的编码。由 File 引用的 I/O 设备的位置不受影响。如果无法从 I/O 设备读取有效编码,则将 I/O 设备的编码设置为默认编码。

返回读取的编码,如果没有找到有效的编码,则返回 none

链接到此函数

set_encoding(File, Default)

查看源代码 (自 OTP 17.0 起)
-spec set_encoding(File, Default) -> source_encoding() | none
                      when Default :: source_encoding(), File :: io:device().

从 I/O 设备读取 编码,并相应地设置设备的编码。由 File 引用的 I/O 设备的位置不受影响。如果无法从 I/O 设备读取有效编码,则将 I/O 设备的编码设置为由 Default 指定的 编码

返回读取的编码,如果没有找到有效的编码,则返回 none