erl_scan
erl_scan
模块
erl_scan
模块摘要
Erlang令牌扫描仪。
描述
该模块包含将字符标记(扫描)到Erlang令牌中的功能。
数据类型
category() = atom()
error_description() = term()
error_info() =
{
erl_anno:location()
, module(),
error_description()
}
option() =
return |
return_white_spaces |
return_comments |
text |
{reserved_word_fun,
resword_fun()
}
options() =
option()
| [
option()
]
symbol() = atom() | float() | integer() | string()
resword_fun() = fun((atom()) -> boolean())
token() =
{
category()
, Anno ::
erl_anno:anno()
,
symbol()
} |
{
category()
, Anno ::
erl_anno:anno()
}
tokens() = [
token()
]
tokens_result() =
{ok, Tokens ::
tokens()
, EndLocation ::
erl_anno:location()
} |
{eof, EndLocation ::
erl_anno:location()
} |
{error,
ErrorInfo ::
error_info()
,
EndLocation ::
erl_anno:location()
}
输出
category(Token) -> category()
类型
返回Token
...
column(Token) -> erl_anno:column() | undefined
类型
返回Token
注释集合的列。
end_location(Token) -> erl_anno:location() | undefined
类型
返回Token
注释集合文本的结束位置。如果没有文字,undefined
则返回。
format_error(ErrorDescriptor) -> string()
类型
使用ErrorDescriptor
并返回描述错误或警告的字符串。这个函数通常在ErrorInfo
处理结构时隐式调用(请参阅部分Error Information
)。
line(Token) -> erl_anno:line()
类型
返回Token
注释集合的行。
location(Token) -> erl_anno:location()
类型
返回Token
注释集合的位置。
reserved_word(Atom :: atom()) -> boolean()
如果Atom是Erlang保留字,则返回true,否则返回false。
string(String) -> Return
string(String, StartLocation) -> Return
string(String, StartLocation, Options) -> Return
类型
获取字符列表String
并尝试扫描(标记)它们。返回以下内容之一:
{ok, Tokens, EndLocation}
Tokens
是来自Erlang的令牌String
。EndLocation
是最后一个令牌之后的第一个位置。
{error, ErrorInfo, ErrorLocation}
发生了一个错误。ErrorLocation
是错误令牌之后的第一个位置。
string(String)
相当于string(String, 1)
,string(String, StartLocation)
相当于string(String, StartLocation, [])
。
StartLocation
指示扫描开始时的初始位置。如果StartLocation
是一条线,Anno
,EndLocation
,和ErrorLocation
都行。如果StartLocation
是一对行和一列,则Anno
采用不透明复合数据类型的形式,EndLocation
并且ErrorLocation
是一对行和一列。所述令牌注释
包含关于柱,并且其中所述令牌开始的行的信息,以及所述令牌的文本(如果选项text
指定),所有这些都可以通过调用被访问column/1
,line/1
,location/1
,和text/1
。
令牌
是含有约句法类,令牌
注解,和终端符号信息的元组。对于标点符号(例如;
和|
)和保留字,类别和符号重合,并且令牌
由二元组表示。三元组有以下几种形式之一:
{atom, Anno, atom()}
{char, Anno, char()}
{comment, Anno, string()}
{float, Anno, float()}
{integer, Anno, integer()}
{var, Anno, atom()}
{white_space, Anno, string()}
有效选择:
{reserved_word_fun, reserved_word_fun()}
当扫描器找到未加引号的原子时调用的回调函数。如果该函数返回true
,则不加引号的原子本身将成为该令牌的类别。如果函数返回false
,则atom
成为未加引号的原子的类别。
return_comments
返回注释标记。
return_white_spaces
返回空格标记。按照惯例,换行符(如果存在)始终是文本的第一个字符(在空白符号中不能有多于一个换行符)。
return
简称[return_comments, return_white_spaces]
...
text
在令牌注释中包含令牌文本。文本是与令牌对应的输入的一部分。
symbol(Token) -> symbol()
类型
返回Token
...
text(Token) -> erl_anno:text() | undefined
类型
返回Token
注释集合的文本。如果没有文字,undefined
则被返回。
tokens(Continuation, CharSpec, StartLocation) -> Return
tokens(Continuation, CharSpec, StartLocation, Options) -> Return
类型
不透明的延续。
这是可重复扫描器,可以扫描字符,直到点
('。'后面跟着一个空格)或eof
到达。它返回:
{done, Result, LeftOverChars}
指示有足够的输入数据来获得结果。Result
是:
{ok, Tokens, EndLocation}
扫描成功。Tokens
是包括网点
...
{eof, EndLocation}
在任何其他令牌之前都会遇到文件的结束。
{error, ErrorInfo, EndLocation}
发生错误。 LeftOverChars是从EndLocation开始的输入数据的其余字符。
**`{more, Continuation1}`**
建立一个术语需要更多的数据。Continuation1
必须在有tokens/3,4
更多数据可用时通过新的调用。
该CharSpec
eof
信号结束的文件。LeftOverChars
然后取值eof
。
tokens(Continuation, CharSpec, StartLocation)
等于tokens(Continuation, CharSpec, StartLocation, [])
...
有关选项的说明,请参见string/3
...
错误信息
ErrorInfo
是标准ErrorInfo
结构,从所有I/O模块返回。格式如下:
{ErrorLocation, Module, ErrorDescriptor}
通过以下调用获得一个描述错误的字符串:
Module:format_error(ErrorDescriptor)
注记
首次调用重入输入函数的继续必须是[]
。有关可重入输入方案如何工作的完整描述,请参见Armstrong,Virding和Williams:第13章中的'Erlang中的并发编程'。
另见
erl_anno(3)
,erl_parse(3)
,io(3)