Implemented a first and basic version of a Rete rule engine

This commit is contained in:
2021-02-09 16:06:32 +01:00
parent 821dbed189
commit a2a8d5c5e5
110 changed files with 7301 additions and 1654 deletions
+11 -5
View File
@@ -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):