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用户指南
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com

