resrap-rs 0.1.1

A rule based code generator
Documentation
use std::collections::HashMap;

use crate::core::{
    frozen_graph::FrozenSyntaxGraph, parser::Parser, regex::Regexer, scanner::Scanner,
};

pub struct GraphBuilder {
    pars: Parser,
    frozen: FrozenSyntaxGraph,
}
impl GraphBuilder {
    pub fn new() -> Self {
        GraphBuilder {
            pars: Parser::new(),
            frozen: FrozenSyntaxGraph {
                node_ref: HashMap::new(),
                name_map: HashMap::new(),
                print_map: HashMap::new(),
                regexer: Regexer::new(),
            },
        }
    }
    pub fn take_graph(self) -> FrozenSyntaxGraph {
        self.frozen
    }
    pub fn start_generation(&mut self, grammar: String) -> Result<(), String> {
        let sc = Scanner::new(grammar);
        let (tokens, errors) = sc.scan();

        if !errors.is_empty() {
            Err(String::from("Scan Error"))
        } else {
            self.pars.tokens = tokens;

            self.pars.parse_grammar();
            self.pars.graph.normalize();
            self.pars.graph.print_map = self.pars.charmap.clone();
            self.pars.graph.name_map = self.pars.name_map.clone();
            self.pars.graph.regexer = self.pars.regexhandler.clone();
            self.frozen = self.pars.graph.clone().freeze();

            if !self.pars.errors.is_empty() {
                Err(String::from(&self.pars.errors[0]))
            } else {
                return Ok(());
            }
        }
    }
}