diff --git a/scie-grammar/src/grammar/grammar/mod.rs b/scie-grammar/src/grammar/grammar/mod.rs index eb066b725521ee6e1dce0b314c730a1e5b1c1413..3b5cf1f1b47719f6388c7d4e8a41397156e01be4 100644 --- a/scie-grammar/src/grammar/grammar/mod.rs +++ b/scie-grammar/src/grammar/grammar/mod.rs @@ -5,11 +5,12 @@ use onig::*; use crate::grammar::grammar::stack_element::StackElement; use crate::inter::{IRawGrammar, IRawRepository, IRawRepositoryMap, IRawRule}; use crate::rule::{ - AbstractRule, IGrammarRegistry, IRuleFactoryHelper, IRuleRegistry, NoneRule, + IGrammarRegistry, IRuleFactoryHelper, IRuleRegistry, NoneRule, }; use crate::rule::rule_factory::RuleFactory; use crate::grammar::line_tokens::{LineTokens, TokenTypeMatcher}; use crate::grammar::grammar::scope_list_element::ScopeListElement; +use crate::rule::abstract_rule::AbstractRule; pub mod scope_list_element; pub mod scope_metadata; diff --git a/scie-grammar/src/grammar/grammar/stack_element.rs b/scie-grammar/src/grammar/grammar/stack_element.rs index 29ff2a98aff1dbf051136734f712a1cd12404ee3..abf0976a1d3905851f3484f0a751e1568a888d5a 100644 --- a/scie-grammar/src/grammar/grammar/stack_element.rs +++ b/scie-grammar/src/grammar/grammar/stack_element.rs @@ -2,7 +2,8 @@ use crate::grammar::grammar::scope_list_element::ScopeListElement; use core::ptr; use crate::grammar::grammar::Grammar; use crate::grammar::grammar_registry::GrammarRegistry; -use crate::rule::{IRuleRegistry, AbstractRule}; +use crate::rule::{IRuleRegistry}; +use crate::rule::abstract_rule::AbstractRule; #[derive(Debug, Clone, PartialEq, Eq)] pub struct StackElement { diff --git a/scie-grammar/src/rule/abstract_rule.rs b/scie-grammar/src/rule/abstract_rule.rs new file mode 100644 index 0000000000000000000000000000000000000000..3e6774698832c5a7ea1188776dfeaec413cd768c --- /dev/null +++ b/scie-grammar/src/rule/abstract_rule.rs @@ -0,0 +1,21 @@ +use dyn_clone::{clone_trait_object, DynClone}; +use core::fmt; + +pub trait AbstractRule: DynClone + erased_serde::Serialize { + fn id(&self) -> i32; + fn type_of(&self) -> String; + fn has_missing_pattern(&self) -> bool { + false + } +} + +impl fmt::Debug for dyn AbstractRule { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "AbstractRule") + } +} + +serialize_trait_object!(AbstractRule); + +clone_trait_object!(AbstractRule); + diff --git a/scie-grammar/src/rule/compiled_rule.rs b/scie-grammar/src/rule/compiled_rule.rs new file mode 100644 index 0000000000000000000000000000000000000000..276f69f308b15f113ae139560959c0287be83299 --- /dev/null +++ b/scie-grammar/src/rule/compiled_rule.rs @@ -0,0 +1,10 @@ +pub struct CompiledRule { + pub debug_reg_exps: Vec, + pub rules: Vec +} + +impl CompiledRule { + pub fn new(debug_reg_exps: Vec, rules: Vec) -> Self { + CompiledRule { debug_reg_exps, rules } + } +} \ No newline at end of file diff --git a/scie-grammar/src/rule/mod.rs b/scie-grammar/src/rule/mod.rs index dd7e4f8492120fffd10969e93e1cf516fa9e9d94..547b5a0de53ed0080983e732cf76478be65e8efb 100644 --- a/scie-grammar/src/rule/mod.rs +++ b/scie-grammar/src/rule/mod.rs @@ -1,23 +1,25 @@ pub mod rule_factory; pub mod rule_convert; pub mod reg_exp_source; +pub mod compiled_rule; +pub(crate) mod abstract_rule; use crate::inter::{ILocation, IRawGrammar, IRawRepository}; use reg_exp_source::{RegExpSource, RegExpSourceList}; use crate::rule::rule_factory::ICompilePatternsResult; use core::fmt; -use dyn_clone::{clone_trait_object, DynClone}; use serde::{Serialize, Serializer}; +use abstract_rule::AbstractRule; #[derive(Clone, Debug, Serialize)] pub struct Rule { pub _type: String, - #[serde(skip_serializing_if="Option::is_none")] + #[serde(skip_serializing_if = "Option::is_none")] pub _location: Option, pub id: i32, - #[serde(skip_serializing_if="Option::is_none")] + #[serde(skip_serializing_if = "Option::is_none")] pub _name: Option, - #[serde(skip_serializing_if="Option::is_none")] + #[serde(skip_serializing_if = "Option::is_none")] pub _content_name: Option, } @@ -38,30 +40,12 @@ impl Rule { } } -pub trait AbstractRule: DynClone + erased_serde::Serialize { - fn id(&self) -> i32; - fn type_of(&self) -> String; - fn has_missing_pattern(&self) -> bool { - false - } -} - -serialize_trait_object!(AbstractRule); - -impl fmt::Debug for dyn AbstractRule { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - write!(f, "AbstractRule") - } -} - -clone_trait_object!(AbstractRule); - #[derive(Clone, Debug, Serialize)] pub struct IncludeOnlyRule { #[serde(flatten)] pub rule: Rule, pub patterns: Vec, - pub has_missing_patterns: bool + pub has_missing_patterns: bool, } impl IncludeOnlyRule { @@ -81,7 +65,7 @@ impl IncludeOnlyRule { _content_name: content_name, }, patterns: captures.patterns, - has_missing_patterns: captures.has_missing_patterns + has_missing_patterns: captures.has_missing_patterns, } } } @@ -111,7 +95,7 @@ pub struct BeginWhileRule { pub patterns: ICompilePatternsResult, pub has_missing_patterns: bool, - #[serde(skip_serializing_if="Option::is_none")] + #[serde(skip_serializing_if = "Option::is_none")] pub cached_compiled_patterns: Option, } @@ -202,9 +186,9 @@ pub struct BeginEndRule { pub _end: RegExpSource, // pub endHasBackReferences: Option, pub end_captures: Vec>, - #[serde(skip_serializing_if="Option::is_none")] + #[serde(skip_serializing_if = "Option::is_none")] pub apply_end_pattern_last: Option, - #[serde(skip_serializing_if="Option::is_none")] + #[serde(skip_serializing_if = "Option::is_none")] pub _cached_compiled_patterns: Option, pub patterns: Vec, pub has_missing_patterns: bool, @@ -238,7 +222,7 @@ impl BeginEndRule { apply_end_pattern_last, has_missing_patterns: patterns.clone().has_missing_patterns, patterns: patterns.patterns, - _cached_compiled_patterns: None + _cached_compiled_patterns: None, } } } @@ -256,7 +240,7 @@ impl AbstractRule for BeginEndRule { #[derive(Clone, Debug, Serialize)] pub struct CaptureRule { pub rule: Rule, - pub retokenize_captured_with_rule_id: i32 + pub retokenize_captured_with_rule_id: i32, } impl CaptureRule { @@ -267,9 +251,9 @@ impl CaptureRule { _location: None, id: 0, _name: None, - _content_name: None + _content_name: None, }, - retokenize_captured_with_rule_id: 0 + retokenize_captured_with_rule_id: 0, } } pub fn new(location: Option, id: i32, name: Option, content_name: Option, retokenize_captured_with_rule_id: i32) -> Self { @@ -281,7 +265,7 @@ impl CaptureRule { _name: name, _content_name: content_name, }, - retokenize_captured_with_rule_id + retokenize_captured_with_rule_id, } } }