#![allow(dead_code)]
use std::{
fs::File,
io::{stdin, stdout, BufRead, BufReader, Write},
path::Path,
};
use alkale::{token::Token, TokenizerContext};
struct Word(String);
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 file = File::open(path).expect("Could not open file.");
let mut reader = BufReader::new(file);
let mut context = TokenizerContext::new_file(&mut reader, |x| match x {
Ok(char) => char,
Err(_) => panic!("Unable to read file."),
});
while context.has_next() {
if let Some((ident, span)) = context.try_parse_standard_identifier() {
context.push_token(Token::new(ident, span));
} else {
context.skip();
}
}
println!();
println!("{:#?}", context.result());
}