Expand description
Generate lexer from token specifications.
JLEK is the lexer used by JJIK parser generator. Currently, JLEK cannot be used standalone
without JJIK, since the generated lexer module (lexer.rs) depends on a module generated
by JJIK (symbol.rs).
§Usage
[dependencies]
jlek = "0.1.0"A token specification consists of an identifier and a regular expression (see TokenSpec). Accepted regular expression syntax is given in Regular Expression Syntax.
use std::path::PathBuf;
// create a token specification for decimal numbers
let number = jlek::TokenSpec::new("Number".to_string(), "\\d\\d*".to_string());
let token_specs = vec![number];
// generate `lexer.rs` at `output_directory`
let output_directory = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("src");
jlek::generate(&token_specs, &output_directory).unwrap();You can then use the generated lexer as follows:
ⓘ
mod lexer;
let lexer = lexer::Lexer::from_source_str("123");
lexer.next_token().unwrap();§Regular Expression Syntax
§Character classes
\d decimal digit (0-9).
\w lowercase character (a-z).
\ escape character for matching with special characters (`\`, `*`, `|`, `(`, `)`), e.g.
`\*` matches with "*".§Supported operators
xy concatenation; match with x followed by y.
x|y disjunction; match with either x or y.
x* kleene; match with one or more occurance x.
(x) parenthesis; groups an expression for overriding precedence.Structs§
- Token
Spec - A token specification.
Functions§
- generate
- Generates a lexer from token specifications.