非常教程

Erlang 20参考手册

stdlib

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树有相同结构的术语,但是用术语表示Terl_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附加。

错误信息

ErrorInfoErrorInfo从所有I / O模块返回的标准结构。格式如下:

{ErrorLine, Module, ErrorDescriptor}

通过以下调用获得一个描述错误的字符串:

Module:format_error(ErrorDescriptor)

另见

erl_anno(3)erl_scan(3)io(3),部分The Abstract Format的ERTS用户指南

Erlang 20

Erlang 是一种通用的面向并发的编程语言,可应付大规模开发活动的程序设计语言和运行环境。

主页 https://www.erlang.org/
源码 https://github.com/erlang/otp
版本 20
发布版本 20.1