檢視原始碼 erl_scan (stdlib v6.2)

Erlang 詞法掃描器。

此模組包含將字元轉換(掃描)成 Erlang 符號的函式。

錯誤資訊

ErrorInfo 是從所有 I/O 模組返回的標準 ErrorInfo 結構。其格式如下:

{ErrorLocation, Module, ErrorDescriptor}

可以使用以下呼叫取得描述錯誤的字串:

Module:format_error(ErrorDescriptor)

注意事項

首次呼叫可重入輸入函式的延續必須是 []。有關可重入輸入方案如何運作的完整說明,請參閱 Armstrong、Virding 和 Williams 的《Erlang 並行程式設計》第 13 章。

另請參閱

erl_annoerl_parseio

摘要

函式

傳回 Token 的類別。

傳回 Token 註解集合的欄位。

傳回 Token 註解集合的文字結束位置。如果沒有文字,則傳回 undefined

使用 ErrorDescriptor 並傳回描述錯誤或警告的字串。處理 ErrorInfo 結構時,通常會隱含地呼叫此函式(請參閱 錯誤資訊 小節)。

傳回 Token 註解集合的行號。

傳回 Token 註解集合的位置。

如果 Atom 是 Erlang 保留字,則傳回 true,否則傳回 false

接收字元列表 String,並嘗試掃描(符號化)它們。

傳回 Token 的符號。

傳回 Token 註解集合的文字。如果沒有文字,則傳回 undefined

這是可重入掃描器,它掃描字元,直到遇到「」('.' 後面接著空白)或 eof 為止。

型別

此型別的連結

category()

檢視原始碼 (未匯出)
-type category() :: atom().
此型別的連結

char_spec()

檢視原始碼 (未匯出)
-type char_spec() :: string() | eof.
此型別的連結

error_description()

檢視原始碼 (未匯出)
-type error_description() :: term().
-type error_info() :: {erl_anno:location(), module(), error_description()}.
此型別的連結

option()

檢視原始碼 (未匯出)
-type option() ::
          return | return_white_spaces | return_comments | text |
          {reserved_word_fun, resword_fun()} |
          {text_fun, text_fun()} |
          {compiler_internal, [term()]}.
-type options() :: option() | [option()].
此型別的連結

resword_fun()

檢視原始碼 (未匯出)
-type resword_fun() :: fun((atom()) -> boolean()).
-opaque return_cont()
此型別的連結

symbol()

檢視原始碼 (未匯出)
-type symbol() :: atom() | float() | integer() | string().
此型別的連結

text_fun()

檢視原始碼 (未匯出)
-type text_fun() :: fun((atom(), string()) -> boolean()).
-type token() :: {category(), Anno :: erl_anno:anno(), symbol()} | {category(), Anno :: erl_anno:anno()}.
-type tokens() :: [token()].
-type tokens_result() ::
          {ok, Tokens :: tokens(), EndLocation :: erl_anno:location()} |
          {eof, EndLocation :: erl_anno:location()} |
          {error, ErrorInfo :: error_info(), EndLocation :: erl_anno:location()}.

函式

此函式的連結

category(Token)

檢視原始碼 (自 OTP 18.0 起)
-spec category(Token) -> category() when Token :: token().

傳回 Token 的類別。

此函式的連結

column(Token)

檢視原始碼 (自 OTP 18.0 起)
-spec column(Token) -> erl_anno:column() | undefined when Token :: token().

傳回 Token 註解集合的欄位。

此函式的連結

end_location(Token)

檢視原始碼 (自 OTP 18.0 起)
-spec end_location(Token) -> erl_anno:location() | undefined when Token :: token().

傳回 Token 註解集合的文字結束位置。如果沒有文字,則傳回 undefined

此函式的連結

format_error(ErrorDescriptor)

檢視原始碼
-spec format_error(ErrorDescriptor) -> string() when ErrorDescriptor :: error_description().

使用 ErrorDescriptor 並傳回描述錯誤或警告的字串。處理 ErrorInfo 結構時,通常會隱含地呼叫此函式(請參閱 錯誤資訊 小節)。

此函式的連結

line(Token)

檢視原始碼 (自 OTP 18.0 起)
-spec line(Token) -> erl_anno:line() when Token :: token().

傳回 Token 註解集合的行號。

此函式的連結

location(Token)

檢視原始碼 (自 OTP 18.0 起)
-spec location(Token) -> erl_anno:location() when Token :: token().

傳回 Token 註解集合的位置。

-spec reserved_word(Atom :: atom()) -> boolean().

如果 Atom 是 Erlang 保留字,則傳回 true,否則傳回 false

-spec string(String) -> Return
                when
                    String :: string(),
                    Return ::
                        {ok, Tokens :: tokens(), EndLocation} |
                        {error, ErrorInfo :: error_info(), ErrorLocation},
                    EndLocation :: erl_anno:location(),
                    ErrorLocation :: erl_anno:location().

等同於 string(String, 1)

此函式的連結

string(String, StartLocation)

檢視原始碼
-spec string(String, StartLocation) -> Return
                when
                    String :: string(),
                    Return ::
                        {ok, Tokens :: tokens(), EndLocation} |
                        {error, ErrorInfo :: error_info(), ErrorLocation},
                    StartLocation :: erl_anno:location(),
                    EndLocation :: erl_anno:location(),
                    ErrorLocation :: erl_anno:location().

等同於 string(String, StartLocation, [])

此函式的連結

string(String, StartLocation, Options)

檢視原始碼
-spec string(String, StartLocation, Options) -> Return
                when
                    String :: string(),
                    Options :: options(),
                    Return ::
                        {ok, Tokens :: tokens(), EndLocation} |
                        {error, ErrorInfo :: error_info(), ErrorLocation},
                    StartLocation :: erl_anno:location(),
                    EndLocation :: erl_anno:location(),
                    ErrorLocation :: erl_anno:location().

接收字元列表 String,並嘗試掃描(符號化)它們。

傳回下列其中一個值:

  • {ok, Tokens, EndLocation} - Tokens 是來自 String 的 Erlang 符號。EndLocation 是最後一個符號之後的第一個位置。

  • {error, ErrorInfo, ErrorLocation} - 發生錯誤。ErrorLocation 是錯誤符號之後的第一個位置。

StartLocation 表示掃描開始時的初始位置。如果 StartLocation 是一行,則 AnnoEndLocationErrorLocation 是行。如果 StartLocation 是一行和一欄的配對,則 Anno 會採用不透明的複合資料型別形式,而 EndLocationErrorLocation 則是一行和一欄的配對。符號註解包含有關符號開始所在的欄位和行,以及符號文字(如果指定 text 選項),所有這些都可以透過呼叫 column/1line/1location/1text/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 - 在符號註解中包含符號文字。此文字是與符號對應的輸入部分。另請參閱 text_fun

  • {text_fun, text_fun()} - 用來決定是否將符號的完整文字包含在符號註解中的回呼函式。函式的引數是符號的類別和完整符號字串。這僅在未出現 text 時使用。如果兩者皆未出現,則文字不會儲存在符號註解中。

  • {compiler_internal, term()} - 將編譯器內部選項傳遞給掃描器。掃描器可理解的內部選項集應視為實驗性質,因此可能會隨時變更,恕不另行通知。

    目前可理解下列選項:

    • ssa_checks - 將用於在編譯器產生的 BEAM SSA 程式碼上編碼測試的原始碼註解符號化。
此函式的連結

symbol(Token)

檢視原始碼 (自 OTP 18.0 起)
-spec symbol(Token) -> symbol() when Token :: token().

傳回 Token 的符號。

此函式的連結

text(Token)

檢視原始碼 (自 OTP 18.0 起)
-spec text(Token) -> erl_anno:text() | undefined when Token :: token().

傳回 Token 註解集合的文字。如果沒有文字,則傳回 undefined

此函式的連結

tokens(Continuation, CharSpec, StartLocation)

檢視原始碼
-spec tokens(Continuation, CharSpec, StartLocation) -> Return
                when
                    Continuation :: return_cont() | [],
                    CharSpec :: char_spec(),
                    StartLocation :: erl_anno:location(),
                    Return ::
                        {done, Result :: tokens_result(), LeftOverChars :: char_spec()} |
                        {more, Continuation1 :: return_cont()}.

等同於 tokens(Continuation, CharSpec, StartLocation, [])

此函式的連結

tokens(Continuation, CharSpec, StartLocation, Options)

檢視原始碼
-spec tokens(Continuation, CharSpec, StartLocation, Options) -> Return
                when
                    Continuation :: return_cont() | [],
                    CharSpec :: char_spec(),
                    StartLocation :: erl_anno:location(),
                    Options :: options(),
                    Return ::
                        {done, Result :: tokens_result(), LeftOverChars :: char_spec()} |
                        {more, Continuation1 :: return_cont()}.

這是可重入掃描器,它掃描字元,直到遇到「」('.' 後面接著空白)或 eof 為止。

它傳回:

  • {done, Result, LeftOverChars} - 表示有足夠的輸入資料來取得結果。Result 為:

    • {ok, Tokens, EndLocation} - 掃描成功。Tokens 是包含的符號列表。

    • {eof, EndLocation} - 在任何其他符號之前遇到檔案結尾。

    • {error, ErrorInfo, EndLocation} - 發生錯誤。LeftOverChars 是輸入資料的其餘字元,從 EndLocation 開始。

  • {more, Continuation1} - 需要更多資料來建構詞彙。當有更多資料可用時,必須在新的 tokens/3,4 呼叫中傳遞 Continuation1

CharSpec eof 表示檔案結尾。LeftOverChars 也會採用 eof 值。

有關選項的說明,請參閱 string/3