1
0
This commit is contained in:
2024-10-04 02:14:52 +03:00
parent 1f0729ca81
commit 532a0560f2
10 changed files with 679 additions and 2 deletions

View File

@@ -1,3 +1,43 @@
fn main() {
println!("Hello, world!");
use std::io;
use std::io::Write;
use parse::token::Token;
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 tokens = parse::lexer::make_tokenizer(&input).collect::<Result<Vec<_>, _>>();
match tokens {
Ok(tokens) => {
let symbols = SymbolsTable::from(tokens.iter().map(|(_, token, _)| token));
let mut writer_tokens = io::BufWriter::new(std::fs::File::create(&args.output_tokens)?);
for (_, token, _) in tokens {
match token {
Token::Name(ref name) => match symbols.get(name) {
Some(id) => writeln!(writer_tokens, "{token} ({id})")?,
None => writeln!(writer_tokens, "{token} (undefined)")?,
},
_ => writeln!(writer_tokens, "{token}")?,
}
}
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(())
}