use std::io; use std::io::Write; use symbols::SymbolsTable; mod cli; mod parse; mod symbols; fn main() -> anyhow::Result<()> { let args = cli::Args::parse(); let input = std::fs::read_to_string(&args.input).unwrap(); let mut symbols = SymbolsTable::default(); let tokens = parse::lexer::make_tokenizer(&input, &mut symbols).collect::, _>>(); match tokens { Ok(tokens) => { let mut writer_tokens = io::BufWriter::new(std::fs::File::create(&args.output_tokens)?); for (_, token, _) in tokens { writeln!(writer_tokens, "{token:>6} - {}", token.as_str())?; } let mut writer_symbols = io::BufWriter::new(std::fs::File::create(&args.output_symbols)?); for (name, id) in &symbols { writeln!(writer_symbols, "{name} -> {id}")?; } } Err(err) => { eprintln!("error: {err}"); } } Ok(()) }