Provides tokenization for TOML documents.
The lexer provides a way to turn a stream of characters into tokens which are further processed by the parser and turned into actual TOML data structures. In the current structure no knowledge about the character stream is required in the parser to generate the data structures.
The validity of all tokens can be guaranteed by the lexer, however syntax errors and semantic errors are not detected until the parser is run. Identification of invalid tokens and recovery of the tokenization is done on a best effort basis.
To avoid overflows in the parser due to deeply nested but unclosed groups, the lexer will always tokenize a complete group to verify it is closed properly. Unclosed groups will lead to the first token of the group getting invalidated, to allow reporting in the parsing phase.
Tokenizer for TOML documents.
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer, | public | :: | buffer | = | 0 |
Index in the buffer queue |
|
character(kind=tfc, len=:), | public, | allocatable | :: | chunk |
Current source chunk, for convenience stored as character array rather than string |
||
type(toml_context), | public | :: | context |
Douple-ended queue for buffering tokens |
|||
character(len=:), | public, | allocatable | :: | filename |
Name of the source file, used for error reporting |
||
integer, | public | :: | pos | = | 0 |
Current internal position in the source chunk |
|
type(stack_item), | public, | allocatable | :: | stack(:) |
Stack of scopes, used to identify the current state of the lexer |
||
integer, | public | :: | top | = | 0 |
Last scope of the lexer |
generic, public :: extract => extract_string, extract_integer, extract_float, extract_bool, extract_datetime | ../../ Extract a token |
procedure, public :: extract_bool | ../../ Extract a boolean from a token |
procedure, public :: extract_datetime | ../../ Extract a timestamp from a token |
procedure, public :: extract_float | ../../ Extract a float from a token |
procedure, public :: extract_integer | ../../ Extract an integer from a token |
procedure, public :: extract_string | ../../ Extract a string from a token |
procedure, public :: get_info | ../../ Get information about source |
procedure, public :: next | ../../ Obtain the next token |
Create a new instance of a lexer by reading from a file
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(toml_lexer), | intent(out) | :: | lexer |
Instance of the lexer |
||
character(len=*), | intent(in) | :: | filename |
Name of the file to read from |
||
type(toml_error), | intent(out), | allocatable | :: | error |
Error code |
Create a new instance of a lexer by reading from a string.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(toml_lexer), | intent(out) | :: | lexer |
Instance of the lexer |
||
character(kind=tfc, len=*), | intent(in) | :: | string |
String to read from |
Create a new instance of a lexer by reading from a unit.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(toml_lexer), | intent(out) | :: | lexer |
Instance of the lexer |
||
integer, | intent(in) | :: | io |
Unit to read from |
||
type(toml_error), | intent(out), | allocatable | :: | error |
Error code |