36 lines
1.1 KiB
Rust
36 lines
1.1 KiB
Rust
use deimos::ast::build::build_ast;
|
|
use deimos::compile::name_analysis::{analyze_names, SymbolTable};
|
|
use deimos::parser::{DeimosParser, Rule};
|
|
use pest::Parser;
|
|
use std::path::Path;
|
|
|
|
pub fn name_analysis(path: &Path) {
|
|
let src = std::fs::read_to_string(path).unwrap();
|
|
let parse_result = DeimosParser::parse(
|
|
Rule::CompilationUnit,
|
|
&src
|
|
);
|
|
match parse_result {
|
|
Ok(mut pairs) => {
|
|
let compilation_unit_pair = pairs.next().unwrap();
|
|
let mut compilation_unit = build_ast(compilation_unit_pair);
|
|
let mut symbol_table = SymbolTable::new();
|
|
let name_analysis_result = analyze_names(
|
|
&mut compilation_unit,
|
|
&mut symbol_table,
|
|
);
|
|
match name_analysis_result {
|
|
Err(e) => {
|
|
eprintln!("{}", e);
|
|
}
|
|
Ok(_) => {
|
|
println!("name_analysis complete");
|
|
println!("{}", symbol_table);
|
|
}
|
|
}
|
|
}
|
|
Err(e) => {
|
|
eprintln!("{}", e);
|
|
}
|
|
}
|
|
} |