From a6e5e7a29ac139ae2f80b4dd6ff23baa942de6f1 Mon Sep 17 00:00:00 2001 From: Phodal Huang Date: Sun, 23 Aug 2020 16:27:50 +0800 Subject: [PATCH] feat: add init map --- scie-grammar/src/grammar/grammar/mod.rs | 27 +++++++++++++++++++++++-- scie-grammar/src/inter/mod.rs | 6 +++--- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/scie-grammar/src/grammar/grammar/mod.rs b/scie-grammar/src/grammar/grammar/mod.rs index 3b54206..eaaae4c 100644 --- a/scie-grammar/src/grammar/grammar/mod.rs +++ b/scie-grammar/src/grammar/grammar/mod.rs @@ -1,4 +1,4 @@ -use crate::inter::{IRawGrammar, IRawRepository, ILocation}; +use crate::inter::{IRawGrammar, IRawRepository, ILocation, IRawRule, IRawRepositoryMap}; use crate::rule::{RuleFactory, IRuleFactoryHelper, IGrammarRegistry, IRuleRegistry, Rule}; use onig::*; @@ -41,10 +41,33 @@ pub struct Grammar { grammar: IRawGrammar, } +pub fn init_grammar(grammar: IRawGrammar, base: Option) -> IRawGrammar { + let mut _grammar = grammar.clone(); + + _grammar.repository = grammar.repository.clone(); + + let mut new_based: IRawRule = IRawRule::new(); + new_based.location = grammar.repository.unwrap().clone().location; + new_based.patterns = Some(grammar.patterns.clone()); + new_based.name = grammar.name; + + let mut repository_map = IRawRepositoryMap::new(); + repository_map.base_s = Some(new_based.clone()); + repository_map.self_s = Some(new_based.clone()); + + _grammar.repository = Some(IRawRepository { + map: Box::new(repository_map.clone()), + location: None + }); + + _grammar +} + impl Grammar { pub fn new(grammar: IRawGrammar) -> Grammar { + let _grammar = init_grammar(grammar.clone(), None); Grammar { - grammar, + grammar: _grammar, root_id: -1, } } diff --git a/scie-grammar/src/inter/mod.rs b/scie-grammar/src/inter/mod.rs index c21ffee..14cc4c1 100644 --- a/scie-grammar/src/inter/mod.rs +++ b/scie-grammar/src/inter/mod.rs @@ -41,9 +41,9 @@ pub struct IRawCapturesMap { #[derive(Serialize, Deserialize, PartialEq, Debug, Clone)] pub struct IRawRepositoryMap { #[serde(flatten)] - name_map: HashMap, - self_s: Option, - base_s: Option, + pub name_map: HashMap, + pub self_s: Option, + pub base_s: Option, } impl IRawRepositoryMap { -- GitLab