Erlang 20

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的令牌StringEndLocation是最后一个令牌之后的第一个位置。

{error, ErrorInfo, ErrorLocation}

发生了一个错误。ErrorLocation是错误令牌之后的第一个位置。

string(String)相当于string(String, 1)string(String, StartLocation)相当于string(String, StartLocation, [])

StartLocation指示扫描开始时的初始位置。如果StartLocation是一条线,AnnoEndLocation,和ErrorLocation都行。如果StartLocation是一对行和一列,则Anno采用不透明复合数据类型的形式,EndLocation并且ErrorLocation是一对行和一列。所述令牌注释包含关于柱,并且其中所述令牌开始的行的信息,以及所述令牌的文本(如果选项text指定),所有这些都可以通过调用被访问column/1line/1location/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)