Implemented a first and basic version of a Rete rule engine
This commit is contained in:
+11
-5
@@ -3,7 +3,7 @@ from dataclasses import dataclass, field
|
||||
|
||||
from core.builtin_concepts import ReturnValueConcept, ParserResultConcept, BuiltinConcepts
|
||||
from core.concept import Concept, DEFINITION_TYPE_BNF, DEFINITION_TYPE_DEF, freeze_concept_attrs
|
||||
from core.rule import Rule, ACTION_TYPE_PRINT
|
||||
from core.rule import Rule, ACTION_TYPE_PRINT, ACTION_TYPE_EXEC
|
||||
from core.sheerka.ExecutionContext import ExecutionContext
|
||||
from core.sheerka.Sheerka import Sheerka
|
||||
from core.sheerka.services.SheerkaRuleManager import SheerkaRuleManager
|
||||
@@ -59,16 +59,22 @@ class InitTestHelper:
|
||||
|
||||
return self
|
||||
|
||||
def with_rules(self, *rules, **kwargs):
|
||||
def with_format_rules(self, *rules, **kwargs):
|
||||
return self.with_rules(ACTION_TYPE_PRINT, *rules, **kwargs)
|
||||
|
||||
def with_exec_rules(self, *rules, **kwargs):
|
||||
return self.with_rules(ACTION_TYPE_EXEC, *rules, **kwargs)
|
||||
|
||||
def with_rules(self, action_type, *rules, **kwargs):
|
||||
create_new = kwargs.get("create_new", True)
|
||||
compile_rule = kwargs.get("compile_rule", True)
|
||||
|
||||
for rule_template in rules:
|
||||
if isinstance(rule_template, tuple):
|
||||
if len(rule_template) == 3:
|
||||
rule = Rule(ACTION_TYPE_PRINT, rule_template[0], rule_template[1], rule_template[2])
|
||||
rule = Rule(action_type, rule_template[0], rule_template[1], rule_template[2])
|
||||
else:
|
||||
rule = Rule(ACTION_TYPE_PRINT, None, rule_template[0], rule_template[1])
|
||||
rule = Rule(action_type, None, rule_template[0], rule_template[1])
|
||||
else:
|
||||
rule = rule_template
|
||||
|
||||
@@ -150,7 +156,7 @@ class BaseTest:
|
||||
return self.init_test(**init_test_args).with_concepts(*concepts, **with_concepts_args).unpack()
|
||||
|
||||
def init_format_rules(self, *rules, **kwargs):
|
||||
return self.init_test(**kwargs).with_rules(*rules, **kwargs).unpack()
|
||||
return self.init_test(**kwargs).with_format_rules(*rules, **kwargs).unpack()
|
||||
|
||||
@staticmethod
|
||||
def get_concept_instance(sheerka, concept, **kwargs):
|
||||
|
||||
Reference in New Issue
Block a user