mirror of
https://github.com/erg-lang/erg.git
synced 2025-09-29 12:24:45 +00:00
Refactor
Add `ASTBuilder`, `Checker`
This commit is contained in:
parent
f12c2ba723
commit
d8799f0895
14 changed files with 254 additions and 104 deletions
50
compiler/erg_parser/builder.rs
Normal file
50
compiler/erg_parser/builder.rs
Normal file
|
@ -0,0 +1,50 @@
|
|||
use erg_common::config::ErgConfig;
|
||||
use erg_common::traits::Runnable;
|
||||
use erg_common::Str;
|
||||
|
||||
use crate::ast::AST;
|
||||
use crate::desugar::Desugarer;
|
||||
use crate::error::ParserRunnerErrors;
|
||||
use crate::parse::ParserRunner;
|
||||
use crate::reorder::Reorderer;
|
||||
|
||||
/// Summarize parsing, desugaring, and reordering
|
||||
pub struct ASTBuilder {
|
||||
runner: ParserRunner,
|
||||
}
|
||||
|
||||
impl ASTBuilder {
|
||||
pub fn new(cfg: ErgConfig) -> Self {
|
||||
Self {
|
||||
runner: ParserRunner::new(cfg),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn build(&mut self) -> Result<AST, ParserRunnerErrors> {
|
||||
let module = self.runner.parse()?;
|
||||
let mut desugarer = Desugarer::new();
|
||||
let module = desugarer.desugar(module);
|
||||
let mut desugarer = Desugarer::new();
|
||||
let module = desugarer.desugar(module);
|
||||
let ast = AST::new(Str::ever(self.runner.cfg().module), module);
|
||||
let reorderer = Reorderer::new();
|
||||
let ast = reorderer
|
||||
.reorder(ast)
|
||||
.map_err(|errs| ParserRunnerErrors::convert(self.runner.input(), errs))?;
|
||||
Ok(ast)
|
||||
}
|
||||
|
||||
pub fn build_with_input(&mut self, src: String) -> Result<AST, ParserRunnerErrors> {
|
||||
let module = self.runner.parse_with_input(src)?;
|
||||
let mut desugarer = Desugarer::new();
|
||||
let module = desugarer.desugar(module);
|
||||
let mut desugarer = Desugarer::new();
|
||||
let module = desugarer.desugar(module);
|
||||
let ast = AST::new(Str::ever(self.runner.cfg().module), module);
|
||||
let reorderer = Reorderer::new();
|
||||
let ast = reorderer
|
||||
.reorder(ast)
|
||||
.map_err(|errs| ParserRunnerErrors::convert(self.runner.input(), errs))?;
|
||||
Ok(ast)
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue