#![allow(missing_docs)]
use std::{
fs,
io::{stdin, stdout, BufRead, Write},
path::Path,
};
use alkale::{span::Spanned, token::Token, LexerResult, SourceCodeScanner};
pub fn main() {
let mut str_path = String::new();
println!(
"Current path: {:?}",
std::env::current_dir().expect("No current dir exists.")
);
println!("Leave input blank to use default path.");
print!("Input path to file: ");
stdout().lock().flush().expect("Could not flush stdout.");
stdin()
.lock()
.read_line(&mut str_path)
.expect("Could not read stdin.");
let trimmed = str_path.trim();
let path = if trimmed.is_empty() {
Path::new("./examples/file/file.txt")
} else {
Path::new(trimmed)
};
println!();
println!("Path: {path:?}");
let source = fs::read_to_string(path).expect("Could not read file");
let context = SourceCodeScanner::new(&source);
let mut result = LexerResult::<&str, ()>::new();
while context.has_next() {
if let Some(Spanned { data, span }) = context.try_consume_standard_identifier() {
result.push_token(Token::new(data, span));
} else {
context.skip();
}
}
println!();
println!("{:#?}", result.finalize());
}