use vb6parse::io::SourceStream;
use vb6parse::lexer::tokenize;
fn main() {
let code = "Dim x As Integer";
let mut input = SourceStream::new("example.bas", code);
let result = tokenize(&mut input);
if result.has_failures() {
println!("Parsing failures:");
for failure in result.failures() {
println!(" {failure:?}");
}
}
let (token_stream_opt, _failures) = result.unpack();
if let Some(token_stream) = token_stream_opt {
println!("File name: {}", token_stream.file_name());
println!("Total tokens: {}", token_stream.len());
println!("Current offset: {}", token_stream.offset());
println!();
println!("Tokens:");
for (i, &(text, token_type)) in token_stream.tokens().iter().enumerate() {
println!(" {i}: {token_type:?} = '{text}'");
}
println!("\nDemonstrating TokenStream navigation:");
let mut stream = token_stream;
for i in 0..3 {
if let Some((text, token)) = stream.next() {
println!("Token {i}: {token:?} = '{text}'");
}
}
println!("Current offset after reading 3 tokens: {}", stream.offset());
stream.reset();
println!("\nAfter reset, offset: {}", stream.offset());
println!("First token by index: {:?}", stream[0]);
println!(
"Current token by current(): {:?}",
stream.current().unwrap()
);
}
}