Working on #48 : Renamed ExpressionParser.py into LogicalOperatorParser.py

This commit is contained in:
2021-03-08 20:06:17 +01:00
parent 031bd0274e
commit a799ab2bbd
6 changed files with 24 additions and 22 deletions
@@ -12,7 +12,7 @@ from core.sheerka.services.sheerka_service import BaseService
from core.tokenizer import Tokenizer
from core.utils import unstr_concept
from parsers.BaseNodeParser import ConceptNode
from parsers.ExpressionParser import ExpressionParser
from parsers.LogicalOperatorParser import LogicalOperatorParser
from parsers.expressions import TrueifyVisitor
CONCEPT_EVALUATION_STEPS = [
@@ -137,7 +137,7 @@ class SheerkaEvaluateConcept(BaseService):
if concept.get_metadata().where is None or concept.get_metadata().where.strip() == "":
return None
ret = ExpressionParser().parse(context, ParserInput(concept.get_metadata().where))
ret = LogicalOperatorParser().parse(context, ParserInput(concept.get_metadata().where))
if not ret.status:
# TODO: manage invalid where clause
return None
+2 -2
View File
@@ -781,6 +781,6 @@ class SheerkaExecute(BaseService):
desc = desc or f"Parsing expression '{source}'"
with context.push(BuiltinConcepts.PARSE_CODE, source, desc) as sub_context:
parser_input = context.sheerka.services[SheerkaExecute.NAME].get_parser_input(source)
from parsers.ExpressionParser import ExpressionParser
expr_parser = ExpressionParser()
from parsers.LogicalOperatorParser import LogicalOperatorParser
expr_parser = LogicalOperatorParser()
return expr_parser.parse(sub_context, parser_input)
@@ -18,8 +18,9 @@ from core.utils import index_tokens, COLORS, get_text_from_tokens
from evaluators.ConceptEvaluator import ConceptEvaluator
from evaluators.PythonEvaluator import PythonEvaluator, Expando
from parsers.BaseNodeParser import SourceCodeWithConceptNode, ConceptNode, SourceCodeNode
from parsers.ExpressionParser import AndNode, ExpressionParser
from parsers.LogicalOperatorParser import LogicalOperatorParser
from parsers.PythonParser import PythonNode
from parsers.expressions import AndNode
from sheerkarete.conditions import AndConditions
CONCEPTS_ONLY_PARSERS = ["ExactConcept", "Bnf", "Sya", "Sequence"]
@@ -649,7 +650,7 @@ class SheerkaRuleManager(BaseService):
super().__init__(sheerka, order=12)
self._format_rules = None # sorted by priority
self._exec_rules = None # sorted by priority
self.expression_parser = ExpressionParser()
self.expression_parser = LogicalOperatorParser()
def initialize(self):
self.sheerka.bind_service_method(self.create_new_rule, True, visible=False)
@@ -60,7 +60,7 @@ class ReteConditionsEmitter:
return [AndConditions(conditions)]
class ExpressionParser(BaseParser):
class LogicalOperatorParser(BaseParser):
"""
will parser logic expression
like not (a and b or c)
@@ -91,7 +91,7 @@ class ExpressionParser(BaseParser):
if not isinstance(parser_input, ParserInput):
return None
context.log(f"Parsing '{parser_input}' with ExpressionParser", self.name)
context.log(f"Parsing '{parser_input}' with LogicalOperatorParser", self.name)
sheerka = context.sheerka
if parser_input.is_empty():
+1 -1
View File
@@ -4,7 +4,7 @@ from core.builtin_concepts_ids import BuiltinConcepts
from core.sheerka.services.SheerkaExecute import ParserInput
from core.tokenizer import TokenKind, Tokenizer
from parsers.ComparisonParser import ComparisonParser
from parsers.ExpressionParser import ParenthesisMismatchError
from parsers.expressions import ParenthesisMismatchError
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
from tests.parsers.parsers_utils import get_expr_node_from_test_node, VAR, EXPR, EQ, NEQ, GT, GTE, LT, LTE, IN, NIN
@@ -8,20 +8,21 @@ from core.rule import Rule
from core.sheerka.services.SheerkaExecute import ParserInput
from core.tokenizer import TokenKind
from parsers.BaseParser import UnexpectedEofParsingError, UnexpectedTokenParsingError
from parsers.ExpressionParser import ExpressionParser, LeftPartNotFoundError, ParenthesisMismatchError
from parsers.LogicalOperatorParser import LogicalOperatorParser
from parsers.PythonParser import PythonNode
from parsers.expressions import TrueifyVisitor, IsAQuestionVisitor, AndNode
from parsers.expressions import TrueifyVisitor, IsAQuestionVisitor, AndNode, LeftPartNotFoundError, \
ParenthesisMismatchError
from sheerkarete.network import ReteNetwork
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
from tests.parsers.parsers_utils import compute_expected_array, resolve_test_concept, EXPR, OR, AND, NOT, \
get_expr_node_from_test_node, get_rete_conditions, CMV, CNC, CC, compare_with_test_object
class TestExpressionParser(TestUsingMemoryBasedSheerka):
class TestLogicalOperatorParser(TestUsingMemoryBasedSheerka):
def init_parser(self):
sheerka, context = self.init_concepts()
parser = ExpressionParser()
parser = LogicalOperatorParser()
return sheerka, context, parser
@pytest.mark.parametrize("expression, expected", [
@@ -228,7 +229,7 @@ class TestExpressionParser(TestUsingMemoryBasedSheerka):
}
sheerka, context, *concepts = self.init_test().with_concepts(*concepts_map.values(), create_new=True).unpack()
parser = ExpressionParser()
parser = LogicalOperatorParser()
expr_node = parser.parse(context, ParserInput(expression)).body.body
return_values, _ = parser.compile_conjunctions(context, [expr_node], "test")
@@ -257,7 +258,7 @@ class TestExpressionParser(TestUsingMemoryBasedSheerka):
def test_i_can_get_compiled_expr_from_simple_python_expressions(self, expression):
sheerka, context, = self.init_test().unpack()
parser = ExpressionParser()
parser = LogicalOperatorParser()
expr_node = parser.parse(context, ParserInput(expression)).body.body
return_values, _ = parser.compile_conjunctions(context, [expr_node], "test")
@@ -278,7 +279,7 @@ class TestExpressionParser(TestUsingMemoryBasedSheerka):
def test_i_can_compile_negative_conjunctions_when_pure_python(self, expression):
sheerka, context, *concepts = self.init_concepts("foo")
parser = ExpressionParser()
parser = LogicalOperatorParser()
expr_node = parser.parse(context, ParserInput(expression)).body.body
return_values, _ = parser.compile_conjunctions(context, expr_node.parts, "test")
@@ -297,7 +298,7 @@ class TestExpressionParser(TestUsingMemoryBasedSheerka):
def test_i_can_get_compiled_expr_from_python_and_concept(self, expression, text_to_compile):
sheerka, context, *concepts = self.init_test().with_concepts(Concept("foo bar"), create_new=True).unpack()
parser = ExpressionParser()
parser = LogicalOperatorParser()
expr_node = parser.parse(context, ParserInput(expression)).body.body
return_values, _ = parser.compile_conjunctions(context, [expr_node], "test")
@@ -321,7 +322,7 @@ class TestExpressionParser(TestUsingMemoryBasedSheerka):
create_new=True
).unpack()
parser = ExpressionParser()
parser = LogicalOperatorParser()
expression = "not a cat is a pet and not bird is an animal and not x > 5 and not dog is a pet"
expr_node = parser.parse(context, ParserInput(expression)).body.body
return_values, _ = parser.compile_conjunctions(context, expr_node.parts, "test")
@@ -355,7 +356,7 @@ class TestExpressionParser(TestUsingMemoryBasedSheerka):
).unpack()
expression = "a cat is a pet and bird is an animal and x > 5 and dog is a pet"
parser = ExpressionParser()
parser = LogicalOperatorParser()
expr_node = parser.parse(context, ParserInput(expression)).body.body
return_values, _ = parser.compile_conjunctions(context, expr_node.parts, "test")
@@ -381,7 +382,7 @@ class TestExpressionParser(TestUsingMemoryBasedSheerka):
create_new=True
).unpack()
parser = ExpressionParser()
parser = LogicalOperatorParser()
expression = "a is a b"
expr_node = parser.parse(context, ParserInput(expression)).body.body
return_values, _ = parser.compile_conjunctions(context, [expr_node], "test")
@@ -407,7 +408,7 @@ class TestExpressionParser(TestUsingMemoryBasedSheerka):
).unpack()
expression = "a cat is a pet and bird is an animal and x > 5 and dog is a pet"
parser = ExpressionParser()
parser = LogicalOperatorParser()
expr_node = parser.parse(context, ParserInput(expression)).body.body
return_values, _ = parser.compile_conjunctions(context, expr_node.parts, "test")
@@ -466,7 +467,7 @@ class TestExpressionParser(TestUsingMemoryBasedSheerka):
sheerka, context, = self.init_test().unpack()
expected_full_condition = get_rete_conditions(*expected_conditions)
parser = ExpressionParser()
parser = LogicalOperatorParser()
expr_node = parser.parse(context, ParserInput(expression)).body.body
nodes = expr_node.parts if isinstance(expr_node, AndNode) else [expr_node]