yggdrasil-shared 0.2.5

Yggdrasil Compiler core shared components
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use crate::optimize::{InsertIgnore, RefineRules, RemarkTags};
use std::str::FromStr;
use yggdrasil_error::{Validate, Validation, YggdrasilError};
use yggdrasil_ir::{grammar::GrammarInfo, traits::CodeOptimizer};


pub fn parse_grammar_raw(grammar: &str) -> Result<GrammarInfo, YggdrasilError> {
    Ok(GrammarInfo::from_str(grammar)?)
}

pub fn parse_grammar(grammar: &str) -> Validation<GrammarInfo> {
    let mut errors = vec![];
    let mut info = GrammarInfo::from_str(grammar).validate(&mut errors)?;
    info = RefineRules::default().optimize(&info).validate(&mut errors)?;
    info = InsertIgnore::default().optimize(&info).validate(&mut errors)?;
    info = RemarkTags::default().optimize(&info).validate(&mut errors)?;
    Validation::Success { value: info, diagnostics: errors }
}