trusty (3) erl_scan.3erl.gz

Provided by: erlang-manpages_16.b.3-dfsg-1ubuntu2.2_all bug

NAME

       erl_scan - The Erlang Token Scanner

DESCRIPTION

       This module contains functions for tokenizing characters into Erlang tokens.

DATA TYPES

       attribute_info() = {column, column()}
                        | {length, integer() >= 1}
                        | {line, info_line()}
                        | {location, info_location()}
                        | {text, string()}

       attributes() = line() | attributes_data()

       attributes_data() = [{column, column()} |
                            {line, info_line()} |
                            {text, string()}]
                         | {line(), column()}

       category() = atom()

       column() = integer() >= 1

       error_description() = term()

       error_info() = {location(), module(), error_description()}

       info_line() = integer() | term()

       info_location() = location() | term()

       line() = integer()

       location() = line() | {line(), column()}

       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(), attributes(), symbol()}
               | {category(), attributes()}

       token_info() = {category, category()}
                    | {symbol, symbol()}
                    | attribute_info()

       tokens() = [token()]

       tokens_result() = {ok,
                          Tokens :: tokens(),
                          EndLocation :: location()}
                       | {eof, EndLocation :: location()}
                       | {error,
                          ErrorInfo :: error_info(),
                          EndLocation :: location()}

EXPORTS

       string(String) -> Return

       string(String, StartLocation) -> Return

       string(String, StartLocation, Options) -> Return

              Types:

                 String = string()
                 Options = options()
                 Return = {ok, Tokens :: tokens(), EndLocation}
                        | {error, ErrorInfo :: error_info(), ErrorLocation}
                 StartLocation = EndLocation = ErrorLocation = location()

              Takes  the  list  of  characters  String  and  tries to scan (tokenize) them. Returns {ok, Tokens,
              EndLocation}, where Tokens are the Erlang tokens from String. EndLocation is  the  first  location
              after the last token.

              {error,  ErrorInfo,  ErrorLocation}  is  returned  if  an error occurs. ErrorLocation is the first
              location after the erroneous token.

              string(String) is equivalent to string(String, 1), and string(String, StartLocation) is equivalent
              to string(String, StartLocation, []).

              StartLocation  indicates  the  initial  location  when scanning starts. If StartLocation is a line
              attributes() as well as EndLocation and ErrorLocation will be lines. If StartLocation is a pair of
              a  line  and a column attributes() takes the form of an opaque compound data type, and EndLocation
              and ErrorLocation will be pairs of a line and a column. The token attributes  contain  information
              about  the  column  and  the line where the token begins, as well as the text of the token (if the
              text  option  is  given),  all  of  which  can  be   accessed   by   calling   token_info/1,2   or
              attributes_info/1,2.

              A  token is a tuple containing information about syntactic category, the token attributes, and the
              actual terminal symbol. For punctuation characters (e.g. ;, |) and reserved  words,  the  category
              and the symbol coincide, and the token is represented by a two-tuple. Three-tuples have one of the
              following forms: {atom, Info, atom()}, {char, Info, integer()}, {comment, Info, string()}, {float,
              Info,  float()},  {integer,  Info,  integer()},  {var,  Info,  atom()},  and  {white_space,  Info,
              string()}.

              The valid options are:

                {reserved_word_fun, reserved_word_fun()}:
                  A callback function that is called when the  scanner  has  found  an  unquoted  atom.  If  the
                  function  returns  true,  the  unquoted  atom itself will be the category of the token; if the
                  function returns false, atom will be the category of the unquoted atom.

                return_comments:
                  Return comment tokens.

                return_white_spaces:
                  Return white space tokens. By convention, if there is a newline character, it  is  always  the
                  first character of the text (there cannot be more than one newline in a white space token).

                return:
                  Short for [return_comments, return_white_spaces].

                text:
                  Include  the  token's  text  in  the  token  attributes.  The  text  is  the part of the input
                  corresponding to the token.

       tokens(Continuation, CharSpec, StartLocation) -> Return

       tokens(Continuation, CharSpec, StartLocation, Options) -> Return

              Types:

                 Continuation = return_cont() | []
                 CharSpec = char_spec()
                 StartLocation = location()
                 Options = options()
                 Return = {done,
                           Result :: tokens_result(),
                           LeftOverChars :: char_spec()}
                        | {more, Continuation1 :: return_cont()}
                 char_spec() = string() | eof
                 return_cont()
                   An opaque continuation

              This is the re-entrant scanner which scans characters until a dot ('.' followed by a white  space)
              or eof has been reached. It returns:

                {done, Result, LeftOverChars}:
                  This return indicates that there is sufficient input data to get a result. Result is:

                  {ok, Tokens, EndLocation}:
                    The scanning was successful. Tokens is the list of tokens including dot.

                  {eof, EndLocation}:
                    End of file was encountered before any more tokens.

                  {error, ErrorInfo, EndLocation}:
                    An  error  occurred.  LeftOverChars  is the remaining characters of the input data, starting
                    from EndLocation.

                {more, Continuation1}:
                  More data is required for building a term. Continuation1 must be  passed  in  a  new  call  to
                  tokens/3,4 when more data is available.

              The CharSpec eof signals end of file. LeftOverChars will then take the value eof as well.

              tokens(Continuation,  CharSpec,  StartLocation)  is  equivalent  to tokens(Continuation, CharSpec,
              StartLocation, []).

              See string/3 for a description of the various options.

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

              Returns true if Atom is an Erlang reserved word, otherwise false.

       token_info(Token) -> TokenInfo

              Types:

                 Token = token()
                 TokenInfo = [TokenInfoTuple :: token_info()]

              Returns a list containing information about the token Token. The order of the  TokenInfoTuples  is
              not defined. See token_info/2 for information about specific TokenInfoTuples.

              Note  that  if  token_info(Token, TokenItem) returns undefined for some TokenItem, the item is not
              included in TokenInfo.

       token_info(Token, TokenItem) -> TokenInfoTuple | undefined

       token_info(Token, TokenItems) -> TokenInfo

              Types:

                 Token = token()
                 TokenItems = [TokenItem :: token_item()]
                 TokenInfo = [TokenInfoTuple :: token_info()]
                 token_item() = category | symbol | attribute_item()
                 attribute_item() = column | length | line | location | text

              Returns a list containing information about the token Token. If one single TokenItem is given  the
              returned value is the corresponding TokenInfoTuple, or undefined if the TokenItem has no value. If
              a list of TokenItems is given the result is a list of  TokenInfoTuple.  The  TokenInfoTuples  will
              appear with the corresponding TokenItems in the same order as the TokenItems appear in the list of
              TokenItems. TokenItems with no value are not included in the list of TokenInfoTuple.

              The following TokenInfoTuples with corresponding TokenItems are valid:

                {category,  category()}:
                  The category of the token.

                {column,  column()}:
                  The column where the token begins.

                {length, integer() > 0}:
                  The length of the token's text.

                {line,  line()}:
                  The line where the token begins.

                {location,  location()}:
                  The line and column where the token begins, or just the line if the column unknown.

                {symbol,  symbol()}:
                  The token's symbol.

                {text, string()}:
                  The token's text.

       attributes_info(Attributes) -> AttributesInfo

              Types:

                 Attributes = attributes()
                 AttributesInfo = [AttributeInfoTuple :: attribute_info()]

              Returns a list containing information about the token attributes  Attributes.  The  order  of  the
              AttributeInfoTuples   is  not  defined.  See  attributes_info/2  for  information  about  specific
              AttributeInfoTuples.

              Note that if attributes_info(Token, AttributeItem) returns undefined for some AttributeItem in the
              list above, the item is not included in AttributesInfo.

       attributes_info(Attributes, AttributeItem) ->
                          AttributeInfoTuple | undefined

       attributes_info(Attributes, AttributeItems) -> AttributeInfo

              Types:

                 Attributes = attributes()
                 AttributeItems = [AttributeItem :: attribute_item()]
                 AttributeInfo = [AttributeInfoTuple :: attribute_info()]
                 attribute_item() = column | length | line | location | text

              Returns  a  list  containing  information  about  the  token  attributes Attributes. If one single
              AttributeItem is given the returned value is the corresponding AttributeInfoTuple, or undefined if
              the  AttributeItem  has  no  value.  If  a  list of AttributeItem is given the result is a list of
              AttributeInfoTuple. The AttributeInfoTuples will appear with the corresponding  AttributeItems  in
              the  same order as the AttributeItems appear in the list of AttributeItems. AttributeItems with no
              value are not included in the list of AttributeInfoTuple.

              The following AttributeInfoTuples with corresponding AttributeItems are valid:

                {column,  column()}:
                  The column where the token begins.

                {length, integer() > 0}:
                  The length of the token's text.

                {line,  line()}:
                  The line where the token begins.

                {location,  location()}:
                  The line and column where the token begins, or just the line if the column unknown.

                {text, string()}:
                  The token's text.

       set_attribute(AttributeItem, Attributes, SetAttributeFun) ->
                        Attributes

              Types:

                 AttributeItem = line
                 Attributes = attributes()
                 SetAttributeFun = fun((info_line()) -> info_line())

              Sets the value of the line attribute of the token attributes Attributes.

              The SetAttributeFun is called with the value of the line attribute, and is to return the new value
              of the line attribute.

       format_error(ErrorDescriptor) -> string()

              Types:

                 ErrorDescriptor = error_description()

              Takes  an ErrorDescriptor and returns a string which describes the error or warning. This function
              is usually called implicitly when processing an ErrorInfo structure (see below).

ERROR INFORMATION

       The ErrorInfo mentioned above is the standard ErrorInfo structure which is returned from all IO  modules.
       It has the following format:

       {ErrorLocation, Module, ErrorDescriptor}

       A string which describes the error is obtained with the following call:

       Module:format_error(ErrorDescriptor)

NOTES

       The  continuation  of  the  first  call to the re-entrant input functions must be []. Refer to Armstrong,
       Virding and Williams, 'Concurrent Programming in Erlang', Chapter 13, for a complete description  of  how
       the re-entrant input scheme works.

SEE ALSO

       io(3erl), erl_parse(3erl)