lab2
This commit is contained in:
44
src/main.rs
44
src/main.rs
@@ -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(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user