Struct LexerConf
pub struct LexerConf {
pub terminals: Vec<TerminalDef>,
pub ignore: Vec<String>,
pub g_regex_flags: u32,
pub callbacks: HashMap<String, TokenCallback>,
pub translate_python_regex: bool,
pub optimize_terminals: bool,
pub scanner_engine: ScannerEngine,
/* private fields */
}Expand description
Everything BasicLexer::new consumes — never global state, so one is built
per accept-set from a filtered conf.
always_accept is deliberately absent: it is a ContextualLexer-only param
whose effect arrives pre-folded into the terminal subset.
Clone (callbacks are Arc-shared) — a custom-lexer instance retains a
copy for the source to build from, Lark’s lexer_type(lexer_conf) handoff.
Fields§
§terminals: Vec<TerminalDef>Loader-preserved order — TokenIds are indices into this list.
ignore: Vec<String>%ignore terminal names.
g_regex_flags: u32Python re flag bitmask, applied at engine-compile time only.
callbacks: HashMap<String, TokenCallback>Per-terminal user callbacks by terminal name; drives the gated CallChain.
translate_python_regex: boolRewrite Python-re constructs whose semantics differ under the Rust
engines ($, \Z, octal escapes, …) to exact Python semantics instead
of raising at build (see [crate::py_regex]).
Off by default, and experimental: hyperlark refuses what it cannot
match Python-exactly.
optimize_terminals: boolRewrite terminals whose exact Lark pattern has a verified
lookaround-free equivalent to that equivalent, keeping them on the
regex-automata fast path.
Applied as a real early TerminalDef rewrite — metadata, sort keys, and
the engine all see the substitute. The core default is on; the
conformance runner threads it off so parity comparisons exercise the true
Lark-dialect patterns.
scanner_engine: ScannerEngineWhich regex-automata engine drives the fast (look-around-free) scanner
partition. Provisional knob overlaid from LarkOptions::scanner_engine;
inherited unchanged by every per-state contextual sub-conf. Default
[ScannerEngine::Lazy].