erl_parse
erl_parse
模块
erl_parse
模块摘要
Erlang解析器。
描述
这个模块是基本的Erlang解析器,它将令牌转换为任何形式(即顶层构造),表达式或术语的抽象形式。 摘要格式在ERTS用户指南中有描述。 请注意,令牌列表必须以点标记结束才能被解析函数接受(请参阅erl_scan(3))模块。
数据类型
abstract_clause()
Erlang从句的抽象形式
abstract_expr()
Erlang表达式的抽象形式。
abstract_form()
Erlang形式的抽象形式。
abstract_type()
Erlang类型的抽象形式。
erl_parse_tree() =
abstract_clause()
|
abstract_expr()
|
abstract_form()
|
abstract_type()
error_description() = term()
error_info() = {
erl_anno:line()
, module(),
error_description()
}
form_info() =
{eof,
erl_anno:line()
} |
{error,
erl_scan:error_info()
|
error_info()
} |
{warning,
erl_scan:error_info()
|
error_info()
}
元组{error, error_info()}
和{warning, error_info()}
,表示语法上不正确的窗体和警告,以及{eof, line()}
,表示在解析完整表单之前遇到的流结束。
token() =
erl_scan:token()
收到
abstract(Data) -> AbsTerm
类型
将Erlang数据结构Data转换为AbsTerm类型的抽象形式。 该函数是normalize / 1的逆函数。
erl_parse:abstract(T)
等于erl_parse:abstract(T, 0)
...
abstract(Data, Options) -> AbsTerm
类型
转换Erlang数据结构Data
变成抽象形式的类型AbsTerm
...
选项Line
是要分配给每个节点的行AbsTerm
。
选项Encoding
用于选择哪些整数列表被视为字符串。默认是使用函数返回的编码epp:default_encoding/0
。值none
意味着没有整数列表被视为字符串。encoding_func()
一次调用一个整数的列表; 如果它返回true
每个整数,则该列表被视为一个字符串。
anno_from_term(Term) - > erl_parse_tree()|form_info()
类型
假定这Term
是一个与erl_parse
树有相同结构的术语,但是用术语表示T
,erl_parse
树有注释集合的地方。返回一个erl_parse
树,其中每个项T
被替换为返回的值erl_anno:from_term(T)
。该术语Term
以深度优先,从左到右的方式遍历。
anno_to_term(Abstr) -> term()
类型
返回一个术语,其中树Anno
的节点的每个注释集合都由返回的术语替换。该树进行遍历的深度优先,左到右的方式。erl_parseAbstrerl_anno:to_term(Anno)erl_parse
fold_anno(Fun, Acc0, Abstr) -> Acc1
类型
通过对erl_parse树Abstr的每个批注集合应用Fun来更新累加器。 对Fun的第一个调用将AccIn作为参数,将返回的累加器AccOut传递给下一个调用,依此类推。 累加器的最终值被返回。 erl_parse树以深度优先,从左到右的方式遍历。
format_error(ErrorDescriptor) -> Chars
类型
使用一个 ErrorDescriptor
并返回描述错误的字符串。这个函数通常在ErrorInfo
处理结构时隐式调用(请参阅部分Error Information
)。
map_anno(Fun, Abstr) -> NewAbstr
类型
通过对erl_parse树的每个节点注释集合应用Fun来修改erl_parse树Abstr。 erl_parse树以深度优先,从左到右的方式遍历。
mapfold_anno(Fun, Acc0, Abstr) -> {NewAbstr, Acc1}
类型
通过应用erl_parse
树的节点的每个注释集合来修改树,同时更新累加器。第一次调用已为第二个参数,返回蓄能器传递给下一个电话,等等。修改后的树和累加器的最终值被返回。该树进行遍历的深度优先,左到右的方式。AbstrFunerl_parseFunAccInAccOuterl_parseerl_parse
new_anno(Term) -> Abstr
类型
假设Term
是一个与树有相同结构的术语erl_parse
,但是locations
其中erl_parse
树有注释集合。返回一个erl_parse
树,其中每个位置L
都由返回的值替换erl_anno:new(L)
。该术语Term
以深度优先,从左到右的方式遍历。
normalise(AbsTerm) -> Data
类型
将AbsTerm
术语的抽象形式转换为常规的Erlang数据结构(即术语本身)。这个函数是与之相反的abstract/1
。
parse_exprs(Tokens) -> {ok, ExprList} | {error, ErrorInfo}
类型
分析Tokens
就好像它是一个表达式列表。返回以下内容之一:
{ok, ExprList}
解析成功。ExprList
解析表达式的抽象形式的列表。
{error, ErrorInfo}
发生了一个错误。
parse_form(Tokens) -> {ok, AbsForm} | {error, ErrorInfo}
类型
解析Tokens
好像是个表格。返回下列内容之一:
{ok, AbsForm}
解析成功。AbsForm
是解析形式的抽象形式。
{error, ErrorInfo}
发生了一个错误。
parse_term(Tokens) -> {ok, Term} | {error, ErrorInfo}
类型
解析Tokens
好像是个术语。返回下列内容之一:
{ok, Term}
解析成功。Term
对应于令牌列表的Erlang项。
{error, ErrorInfo}
发生了一个错误。
tokens(AbsTerm) -> Tokens
tokens(AbsTerm, MoreTokens) -> Tokens
类型
生成表示AbsTerm
表达式抽象形式的标记列表。可选地,MoreTokens
附加。
错误信息
ErrorInfo
是ErrorInfo
从所有I / O模块返回的标准结构。格式如下:
{ErrorLine, Module, ErrorDescriptor}
通过以下调用获得一个描述错误的字符串:
Module:format_error(ErrorDescriptor)
另见
erl_anno(3)
,erl_scan(3)
,io(3)
,部分The Abstract Format
的ERTS用户指南