chiru 0.7.0

A parser generator similar to antlr4.
Documentation
use std::{collections::HashMap, any::Any, error::Error};

use crate::tool::syntaxis::{chiru_visitor::ChiruVisitor, chiru_context::ParserRuleContext};





pub struct ParserRuleVisitor {
  
  pub next_rule_id: usize,

  pub parser_rule_map: HashMap<String, usize>,
}

impl ParserRuleVisitor {
  pub fn new() -> Self {
    Self { next_rule_id: 0, parser_rule_map: HashMap::new(), }
  }
}

impl ChiruVisitor for ParserRuleVisitor {

  fn visit_parser_rule(&mut self, ctx: &dyn ParserRuleContext) -> Result<Box<dyn Any>, Box<dyn Error>> {


    let name = &ctx.rule_ref().unwrap().symbol.text;

    if self.parser_rule_map.contains_key(name) {
      return self.default_result();
    }    

    self.parser_rule_map.insert(name.to_owned(), self.next_rule_id);
    self.next_rule_id += 1;

    self.default_result()
  }
}