37 lines
991 B
Rust
37 lines
991 B
Rust
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::<Result<Vec<_>, _>>();
|
|
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(())
|
|
}
|