use crate::compiler::{CompilationResult, CompilationStage, context::CompilationContext};
#[derive(Debug, Clone)]
pub struct SemanticAnalyzer {
current_stage: CompilationStage,
context: CompilationContext,
}
impl SemanticAnalyzer {
pub fn new(context: CompilationContext) -> Self {
Self { current_stage: CompilationStage::SemanticAnalysis, context }
}
pub fn analyze(&mut self, ast: &str) -> CompilationResult<CompilationContext> {
self.current_stage = CompilationStage::SemanticAnalysis;
CompilationResult::Success(self.context.clone())
}
pub fn current_stage(&self) -> CompilationStage {
self.current_stage
}
pub fn reset(&mut self) {
self.current_stage = CompilationStage::SemanticAnalysis;
self.context = CompilationContext::default();
}
pub fn context(&self) -> &CompilationContext {
&self.context
}
pub fn context_mut(&mut self) -> &mut CompilationContext {
&mut self.context
}
}
impl Default for SemanticAnalyzer {
fn default() -> Self {
Self::new(CompilationContext::default())
}
}