1
0
This commit is contained in:
2024-11-10 10:33:24 +03:00
parent b6c6a3b4b7
commit 322a8faec7
6 changed files with 276 additions and 22 deletions

View File

@@ -1,11 +1,42 @@
use std::collections::HashSet;
use std::io;
use crate::representation::intermediate::IntermediateValue;
use crate::symbols::Symbol;
use crate::{
ast::{typed::TypedExpr, UntypedExpr},
representation::intermediate::IntermediateExpr,
symbols::SymbolsTable,
};
pub fn collect_used_symbols(expr: &[IntermediateExpr]) -> Vec<Symbol> {
let mut used_symbols = HashSet::new();
for expr in expr {
match expr {
IntermediateExpr::IntToFloat { result, value } => {
used_symbols.insert(*result);
if let IntermediateValue::Var { name } = value {
used_symbols.insert(*name);
}
}
IntermediateExpr::BinOp {
result, lhs, rhs, ..
} => {
used_symbols.insert(*result);
if let IntermediateValue::Var { name } = lhs {
used_symbols.insert(*name);
}
if let IntermediateValue::Var { name } = rhs {
used_symbols.insert(*name);
}
}
}
}
used_symbols.into_iter().collect()
}
pub fn print_intermediate_exprs(
exprs: &[IntermediateExpr],
writer: &mut impl io::Write,