| use diagnostics::Diagnostics; | |
| use parser::coverage::Coverage; | |
| use tracing_subscriber::layer::SubscriberExt; | |
| use tracing_subscriber::util::SubscriberInitExt; | |
| fn main() { | |
| let filter = tracing_subscriber::EnvFilter::builder() | |
| .with_env_var("GRAMMAR_LOG") | |
| .with_default_directive(tracing_subscriber::filter::LevelFilter::INFO.into()) | |
| .from_env_lossy(); | |
| tracing_subscriber::registry() | |
| .with(filter) | |
| .with( | |
| tracing_tree::HierarchicalLayer::new(2) | |
| .with_writer(std::io::stderr) | |
| .with_ansi(std::io::IsTerminal::is_terminal(&std::io::stderr())), | |
| ) | |
| .init(); | |
| let src = r###"r"test""###; | |
| let mut diag = Diagnostics::new(); | |
| let grammar = grammar::load_grammar(&mut diag); | |
| let mut coverage = Coverage::default(); | |
| let ts = match parser::lexer::tokenize(&grammar, &mut coverage, src) { | |
| Ok(ts) => ts, | |
| Err(e) => { | |
| eprintln!("error: {}", e.display(src)); | |
| std::process::exit(1); | |
| } | |
| }; | |
| for token in ts.tokens { | |
| eprintln!( | |
| "{} {:?}: `{}`", | |
| token.name, | |
| token.range.clone(), | |
| &src[token.range] | |
| ); | |
| } | |
| } |