John
097e2c4f11
- Renamed literal Types to reflect their literal nature - This allows for consistent naming across future non-literal Types - Complicated lexer Rules have been split into composable sub-rules, and moved into the Rule struct. - This improves modularity, and allows sharing of sub-rules across rules. - Documented each lexer rule with (at least) a one-line blurb describing its function
17 lines
488 B
Rust
17 lines
488 B
Rust
//! This example grabs input from stdin, lexes it, and prints which lexer rules matched
|
|
#![allow(unused_imports)]
|
|
use conlang::lexer::Lexer;
|
|
use std::{error::Error, io::stdin};
|
|
|
|
fn main() -> Result<(), Box<dyn Error>> {
|
|
// get input from stdin
|
|
for line in stdin().lines() {
|
|
let line = line?;
|
|
let mut lexer = Lexer::new(&line);
|
|
while let Some(token) = lexer.any() {
|
|
println!("{:?}: {}", token, &line[token.range()])
|
|
}
|
|
}
|
|
Ok(())
|
|
}
|