Crate lrlex

Source
Expand description

lrlex is a partial replacement for lex / flex. It takes in a .l file and statically compiles it to Rust code. The resulting LRNonStreamingLexerDef can then be given an input string, from which it instantiates an LRNonStreamingLexer. This provides an iterator which can produce the sequence of lrpar::Lexemes for that input, as well as answer basic queries about cfgrammar::Spans (e.g. extracting substrings, calculating line and column numbers).

Re-exports§

pub use crate::lexer::LexFlags;
pub use crate::lexer::Rule;
pub use crate::parser::StartState;
pub use crate::parser::StartStateOperation;

Modules§

unstable_api
A module for lifting restrictions on visibility by enabling unstable features.

Macros§

lrlex_mod
A convenience macro for including statically compiled .l files. A file src/a/b/c.l processed by CTLexerBuilder::lexer_in_src_dir can then be used in a crate with lrlex_mod!("a/b/c.l").

Structs§

CTLexer
An interface to the result of CTLexerBuilder::build().
CTLexerBuilder
A CTLexerBuilder allows one to specify the criteria for building a statically generated lexer.
DefaultLexeme
lrlex’s standard lexeme struct, provided as a convenience.
DefaultLexerTypes
lrlex’s standard LexerTypes struct, provided as a convenience.
LRLexError
A Lexing error.
LRNonStreamingLexer
An LRNonStreamingLexer holds a reference to a string and can lex it into lrpar::Lexemes. Although the struct is tied to a single string, no guarantees are made about whether the lexemes are cached or not.
LRNonStreamingLexerDef
This struct represents, in essence, a .l file in memory. From it one can produce an LRNonStreamingLexer which actually lexes inputs.
LexBuildError
Any error from the Lex parser returns an instance of this struct.
StartStateId

Enums§

LexErrorKind
The various different possible Lex parser errors.
LexerKind
RustEdition
Specifies the Rust Edition that will be emitted during code generation.
Visibility
Specify the visibility of the module generated by CTLexerBuilder.

Constants§

DEFAULT_LEX_FLAGS
LexFlags with flags set to default values.
UNSPECIFIED_LEX_FLAGS
LexFlags with all of the values None.

Traits§

LexerDef
Methods which all lexer definitions must implement.

Functions§

ct_token_map
Create a Rust module named mod_name that can be imported with lrlex_mod!(mod_name). The module contains one const StorageT per token in token_map, with the token prefixed by T_. For example with StorageT u8, mod_name x, and token_map HashMap{"ID": 0, "INT": 1} the generated module will look roughly as follows:

Type Aliases§

LexBuildResult
NonStreamingLexerDefDeprecated