The following character classes exist:
Character Class | Notation Used | Default Members |
upper_case | UC | all upper case letters |
underline | UL | _ |
lower_case | LC | all lower case letters |
digit | N | digits |
blank_space | BS | space, tab and nonprintable ASCII characters |
end_of_line | NL | line feed |
atom_quote | AQ | ' |
string_quote | SQ | " |
list_quote | LQ | |
radix | RA | |
ascii | AS | |
solo | SL | ( ) ] } |
special | SP | ! , ; [ { | |
line_comment | CM | % |
escape | ES | \ |
first_comment | CM1 | / |
second_comment | CM2 | * |
symbol | SY | # + - . : < = > ? @ ^ ` ~ $ & |
The character class of any character can be modified by a chtab-declaration.
Group Type | Notation | Valid Characters |
alphanumerical | ALP | UC UL LC N |
delimiter | DE | ) } ] , | |
any character | ANY | |
non escape | NES | any character except escape |
sign | SGN | + - |
Terms are defined in terms of tokens, and tokens are defined in terms of characters and character classes. Individual tokens can be read with the predicates read_token/2 and read_token/3. The description of the valid tokens follows.
ATOM = (LC ALP*) | (SY | CM1 | CM2 | ES)+ | (AQ (NES | ES ANY+)* AQ) | | | ; | [] | {} | !
INT = [SGN] BS* N+
INTBAS = N+ (AQ | RA) (N | LC | UC)+The base must be an integer between 1 and 36 included, the value being valid for this base.
If the syntax option iso_base_prefix is active, the syntax for based integers is instead
INTBAS = 0 (b | o | x) (N | LC | UC)+which allows binary, octal and hexadecimal numbers respectively.
ASCII = 0 (AQ | RA) ANY | AS ANYThe value of the integer is the ASCII code of the last character.
RAT = [SGN] BS* N+ UL N+
FLOAT = [SGN] BS* N+ . N+ [ (e | E) [SGN] N+ | Inf ] | [SGN] BS* N+ (e | E) [SGN] N+checks are performed that the numbers are in a valid range.
BREAL = FLOAT UL UL FLOATwhere the first float must be less or equal to the second.
STRING = SQ (NES | ES ANY+ | SQ BS* SQ)* SQBy default, consecutive strings are concatenated into a single string. This behaviour can be disabled by the syntax option doubled_quote_is_quote, which causes doubled quotes to be interpreted as a single occurrence of the quote within the string.
LIST = LQ (NES | ES ANY+ | LQ BS* LQ)* LQBy default, consecutive character lists are concatenated into a single character list. This behaviour can be disabled by the syntax option doubled_quote_is_quote, which causes doubled quotes to be interpreted as a single occurrence of the quote within the string.
VAR = (UC | UL) ALP*
EOCL = . (BS | NL | <end of file>) | <end of file>
Within atoms and strings, the escape sequences (ES ANY+) are interpreted: if the sequence matches one of the following valid escape sequences, the corresponding special character is inserted into the quoted item.
Escape Sequence | Result |
ES a |
ASCII alert (7) |
ES b |
ASCII backspace (8) |
ES f |
ASCII form feed (12) |
ES n |
ASCII newline (10) |
ES r |
ASCII carriage return (13) |
ES t |
ASCII tabulation (9) |
ES v |
ASCII vertical tab (11) |
ES e |
ASCII escape (27) |
ES d |
ASCII delete (127) |
ES ES | the ES character itself |
ES AQ | the AQ character itself |
ES SQ | the SQ character itself |
ES LQ | the LQ character itself |
ES NL | ignored |
ES c (BS| NL)* |
ignored |
ES three octal digits | character whose character code is the given octal value |
ES x hex digits ES |
character whose character code is the given hexadecimal value |