Copyright | (c) Eric Mertens 2023 |
---|---|
License | ISC |
Maintainer | emertens@gmail.com |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
This module parses a TOML file into a lazy sequence of tokens. The lexer is aware of nested brackets and equals signs in order to handle TOML's context-sensitive lexing requirements. This context enables the lexer to distinguish between bare keys and various values like: floating-point literals, integer literals, and date literals.
This module uses actions and lexical hooks defined in LexerUtils.
Synopsis
- data Context
- scanToken :: Context -> Located Text -> Either (Located String) (Located Token, Located Text)
- lexValue :: Text -> Either String Token
- data Token
- = TokTrue
- | TokFalse
- | TokComma
- | TokEquals
- | TokNewline
- | TokPeriod
- | TokSquareO
- | TokSquareC
- | Tok2SquareO
- | Tok2SquareC
- | TokCurlyO
- | TokCurlyC
- | TokBareKey Text
- | TokString Text
- | TokMlString Text
- | TokInteger !Integer
- | TokFloat !Double
- | TokOffsetDateTime !ZonedTime
- | TokLocalDateTime !LocalTime
- | TokLocalDate !Day
- | TokLocalTime !TimeOfDay
- | TokEOF
Documentation
Representation of the current lexer state.
TopContext | top-level where |
TableContext | inline table - lex key names |
ValueContext | value lexer - lex number literals |
MlBstrContext Position [Text] | multiline basic string: position of opening delimiter and list of fragments |
BstrContext Position [Text] | basic string: position of opening delimiter and list of fragments |
MlLstrContext Position [Text] | multiline literal string: position of opening delimiter and list of fragments |
LstrContext Position [Text] | literal string: position of opening delimiter and list of fragments |
scanToken :: Context -> Located Text -> Either (Located String) (Located Token, Located Text) Source #
Get the next token from a located string or a located error message.
lexValue :: Text -> Either String Token Source #
Lex a single token in a value context. This is mostly useful for testing.
Lexical token
TokTrue | true |
TokFalse | false |
TokComma | ',' |
TokEquals | '=' |
TokNewline | end-of-line |
TokPeriod |
|
TokSquareO | '[' |
TokSquareC | ']' |
Tok2SquareO | '[[' |
Tok2SquareC | ']]' |
TokCurlyO | '{' |
TokCurlyC | '}' |
TokBareKey Text | bare key |
TokString Text | string literal |
TokMlString Text | multiline string literal |
TokInteger !Integer | integer literal |
TokFloat !Double | floating-point literal |
TokOffsetDateTime !ZonedTime | date-time with timezone offset |
TokLocalDateTime !LocalTime | local date-time |
TokLocalDate !Day | local date |
TokLocalTime !TimeOfDay | local time |
TokEOF | end-of-input |