nlcc/semantic_analysis/
mod.rs1mod case_collection;
2mod goto;
3mod loop_labeling;
4mod name_resolution;
5mod semanalysis_error;
6mod typecheck;
7
8use crate::ast::*;
9use case_collection::collect_cases;
10use goto::ensure_goto_correctness;
11use loop_labeling::label_loops;
12use name_resolution::name_resolution;
13use typecheck::check_types;
14
15pub use semanalysis_error::{Result, SemAnalysisError};
16pub use typecheck::{StaticInit, SYM_TABLE};
17
18pub fn validate(ast: Ast) -> Result<Ast> {
22 let mut resolved = name_resolution(ast)?;
23 ensure_goto_correctness(&mut resolved)?;
24
25 check_types(resolved)
26 .and_then(label_loops)
27 .and_then(collect_cases)
28}