Working on #48 : Working
This commit is contained in:
@@ -790,7 +790,7 @@ def is_a_question(context, concept):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
node = res.body.body
|
node = res.body.body
|
||||||
from parsers.expressions import IsAQuestionVisitor
|
from parsers.BaseExpressionParser import IsAQuestionVisitor
|
||||||
return IsAQuestionVisitor().is_a_question(node)
|
return IsAQuestionVisitor().is_a_question(node)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -278,7 +278,9 @@ class Sheerka(Concept):
|
|||||||
"""
|
"""
|
||||||
core.utils.import_module_and_sub_module("parsers")
|
core.utils.import_module_and_sub_module("parsers")
|
||||||
base_class = core.utils.get_class("parsers.BaseParser.BaseParser")
|
base_class = core.utils.get_class("parsers.BaseParser.BaseParser")
|
||||||
modules_to_skip = ["parsers.BaseNodeParser", "parsers.BaseCustomGrammarParser"]
|
modules_to_skip = ["parsers.BaseNodeParser",
|
||||||
|
"parsers.BaseCustomGrammarParser",
|
||||||
|
"parsers.BaseExpressionParser"]
|
||||||
|
|
||||||
temp_result = {}
|
temp_result = {}
|
||||||
for parser in core.utils.get_sub_classes("parsers", base_class):
|
for parser in core.utils.get_sub_classes("parsers", base_class):
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ from core.tokenizer import Tokenizer
|
|||||||
from core.utils import unstr_concept
|
from core.utils import unstr_concept
|
||||||
from parsers.BaseNodeParser import ConceptNode
|
from parsers.BaseNodeParser import ConceptNode
|
||||||
from parsers.LogicalOperatorParser import LogicalOperatorParser
|
from parsers.LogicalOperatorParser import LogicalOperatorParser
|
||||||
from parsers.expressions import TrueifyVisitor
|
from parsers.BaseExpressionParser import TrueifyVisitor
|
||||||
|
|
||||||
CONCEPT_EVALUATION_STEPS = [
|
CONCEPT_EVALUATION_STEPS = [
|
||||||
BuiltinConcepts.BEFORE_EVALUATION,
|
BuiltinConcepts.BEFORE_EVALUATION,
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ from evaluators.PythonEvaluator import PythonEvaluator, Expando
|
|||||||
from parsers.BaseNodeParser import SourceCodeWithConceptNode, ConceptNode, SourceCodeNode
|
from parsers.BaseNodeParser import SourceCodeWithConceptNode, ConceptNode, SourceCodeNode
|
||||||
from parsers.LogicalOperatorParser import LogicalOperatorParser
|
from parsers.LogicalOperatorParser import LogicalOperatorParser
|
||||||
from parsers.PythonParser import PythonNode
|
from parsers.PythonParser import PythonNode
|
||||||
from parsers.expressions import AndNode
|
from parsers.BaseExpressionParser import AndNode
|
||||||
from sheerkarete.conditions import AndConditions
|
from sheerkarete.conditions import AndConditions
|
||||||
|
|
||||||
CONCEPTS_ONLY_PARSERS = ["ExactConcept", "Bnf", "Sya", "Sequence"]
|
CONCEPTS_ONLY_PARSERS = ["ExactConcept", "Bnf", "Sya", "Sequence"]
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from typing import List, Tuple, Union
|
from typing import List, Tuple, Union
|
||||||
|
|
||||||
from core.tokenizer import Token, TokenKind, Tokenizer
|
from core.sheerka.services.SheerkaExecute import ParserInput
|
||||||
|
from core.tokenizer import Token, TokenKind, Tokenizer, LexerError
|
||||||
from core.utils import tokens_are_matching
|
from core.utils import tokens_are_matching
|
||||||
from parsers.BaseNodeParser import UnrecognizedTokensNode
|
from parsers.BaseNodeParser import UnrecognizedTokensNode
|
||||||
from parsers.BaseParser import Node, ParsingError
|
from parsers.BaseParser import Node, ParsingError, BaseParser
|
||||||
|
|
||||||
|
|
||||||
class ComparisonType:
|
class ComparisonType:
|
||||||
@@ -328,6 +329,23 @@ class FunctionNode(ExprNode):
|
|||||||
parameters: Union[None, List[FunctionParameter]]
|
parameters: Union[None, List[FunctionParameter]]
|
||||||
|
|
||||||
|
|
||||||
|
class BaseExpressionParser(BaseParser):
|
||||||
|
|
||||||
|
def parse_input(self, context, parser_input, error_sink):
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
def reset_parser_input(self, parser_input: ParserInput, error_sink):
|
||||||
|
try:
|
||||||
|
error_sink.clear()
|
||||||
|
parser_input.reset(self.yield_eof)
|
||||||
|
except LexerError as e:
|
||||||
|
error_sink.add_error(e)
|
||||||
|
return False
|
||||||
|
|
||||||
|
parser_input.next_token()
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
class ExpressionVisitor:
|
class ExpressionVisitor:
|
||||||
"""
|
"""
|
||||||
Pyhtonic implementation of visitors for ExprNode
|
Pyhtonic implementation of visitors for ExprNode
|
||||||
+15
-31
@@ -9,6 +9,21 @@ from core.sheerka.services.SheerkaExecute import ParserInput
|
|||||||
from core.tokenizer import TokenKind, Token, LexerError
|
from core.tokenizer import TokenKind, Token, LexerError
|
||||||
|
|
||||||
|
|
||||||
|
class ErrorSink:
|
||||||
|
def __init__(self):
|
||||||
|
self.sink = []
|
||||||
|
|
||||||
|
def add_error(self, error):
|
||||||
|
self.sink.append(error)
|
||||||
|
|
||||||
|
def clear(self):
|
||||||
|
self.sink.clear()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def has_error(self):
|
||||||
|
return len(self.sink) > 0
|
||||||
|
|
||||||
|
|
||||||
@dataclass()
|
@dataclass()
|
||||||
class Node:
|
class Node:
|
||||||
pass
|
pass
|
||||||
@@ -244,34 +259,3 @@ class BaseParserInputParser(BaseParser):
|
|||||||
|
|
||||||
return list_a
|
return list_a
|
||||||
|
|
||||||
|
|
||||||
class BaseExprParser(BaseParser):
|
|
||||||
|
|
||||||
def parse_input(self, context, parser_input, error_sink):
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
def reset_parser_input(self, parser_input: ParserInput, error_sink):
|
|
||||||
try:
|
|
||||||
error_sink.clear()
|
|
||||||
parser_input.reset(self.yield_eof)
|
|
||||||
except LexerError as e:
|
|
||||||
error_sink.add_error(e)
|
|
||||||
return False
|
|
||||||
|
|
||||||
parser_input.next_token()
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
class ErrorSink:
|
|
||||||
def __init__(self):
|
|
||||||
self.sink = []
|
|
||||||
|
|
||||||
def add_error(self, error):
|
|
||||||
self.sink.append(error)
|
|
||||||
|
|
||||||
def clear(self):
|
|
||||||
self.sink.clear()
|
|
||||||
|
|
||||||
@property
|
|
||||||
def has_error(self):
|
|
||||||
return len(self.sink) > 0
|
|
||||||
|
|||||||
@@ -2,14 +2,14 @@ from core.builtin_concepts_ids import BuiltinConcepts
|
|||||||
from core.sheerka.services.SheerkaExecute import ParserInput
|
from core.sheerka.services.SheerkaExecute import ParserInput
|
||||||
from core.tokenizer import TokenKind
|
from core.tokenizer import TokenKind
|
||||||
from core.utils import get_text_from_tokens
|
from core.utils import get_text_from_tokens
|
||||||
from parsers.BaseParser import BaseExprParser, ErrorSink
|
from parsers.BaseParser import ErrorSink
|
||||||
from parsers.FunctionParser import FunctionParser
|
from parsers.FunctionParser import FunctionParser
|
||||||
from parsers.LogicalOperatorParser import LogicalOperatorParser
|
from parsers.LogicalOperatorParser import LogicalOperatorParser
|
||||||
from parsers.RelationalOperatorParser import RelationalOperatorParser
|
from parsers.RelationalOperatorParser import RelationalOperatorParser
|
||||||
from parsers.expressions import ParenthesisNode, NameExprNode, VariableNode
|
from parsers.BaseExpressionParser import ParenthesisNode, NameExprNode, VariableNode, BaseExpressionParser
|
||||||
|
|
||||||
|
|
||||||
class ExpressionParser(BaseExprParser):
|
class ExpressionParser(BaseExpressionParser):
|
||||||
"""
|
"""
|
||||||
Parses expressions
|
Parses expressions
|
||||||
"""
|
"""
|
||||||
@@ -74,7 +74,7 @@ class ExpressionParser(BaseExprParser):
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
class VariableOrNamesParser(BaseExprParser):
|
class VariableOrNamesParser(BaseExpressionParser):
|
||||||
NAME = "VariableOrNames"
|
NAME = "VariableOrNames"
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
|
|||||||
@@ -7,14 +7,14 @@ from core.sheerka.services.SheerkaExecute import ParserInput
|
|||||||
from core.tokenizer import TokenKind
|
from core.tokenizer import TokenKind
|
||||||
from core.utils import get_n_clones
|
from core.utils import get_n_clones
|
||||||
from parsers.BaseNodeParser import SourceCodeNode, SourceCodeWithConceptNode
|
from parsers.BaseNodeParser import SourceCodeNode, SourceCodeWithConceptNode
|
||||||
from parsers.BaseParser import UnexpectedTokenParsingError, UnexpectedEofParsingError, Node, BaseExprParser, \
|
from parsers.BaseParser import UnexpectedTokenParsingError, UnexpectedEofParsingError, Node, \
|
||||||
BaseParserInputParser
|
BaseParserInputParser
|
||||||
from parsers.BnfNodeParser import BnfNodeParser
|
from parsers.BnfNodeParser import BnfNodeParser
|
||||||
from parsers.PythonWithConceptsParser import PythonWithConceptsParser
|
from parsers.PythonWithConceptsParser import PythonWithConceptsParser
|
||||||
from parsers.RuleParser import RuleParser
|
from parsers.RuleParser import RuleParser
|
||||||
from parsers.SequenceNodeParser import SequenceNodeParser
|
from parsers.SequenceNodeParser import SequenceNodeParser
|
||||||
from parsers.SyaNodeParser import SyaNodeParser
|
from parsers.SyaNodeParser import SyaNodeParser
|
||||||
from parsers.expressions import NameExprNode, FunctionNode, FunctionParameter
|
from parsers.BaseExpressionParser import NameExprNode, FunctionNode, FunctionParameter
|
||||||
|
|
||||||
PARSERS = [RuleParser.NAME,
|
PARSERS = [RuleParser.NAME,
|
||||||
SequenceNodeParser.NAME,
|
SequenceNodeParser.NAME,
|
||||||
|
|||||||
@@ -7,10 +7,10 @@ from core.sheerka.services.sheerka_service import FailedToCompileError
|
|||||||
from core.tokenizer import TokenKind, Tokenizer, Keywords
|
from core.tokenizer import TokenKind, Tokenizer, Keywords
|
||||||
from core.utils import get_text_from_tokens
|
from core.utils import get_text_from_tokens
|
||||||
from parsers.BaseNodeParser import UnrecognizedTokensNode
|
from parsers.BaseNodeParser import UnrecognizedTokensNode
|
||||||
from parsers.BaseParser import UnexpectedTokenParsingError, UnexpectedEofParsingError, BaseExprParser, ErrorSink
|
from parsers.BaseParser import UnexpectedTokenParsingError, UnexpectedEofParsingError, ErrorSink
|
||||||
from parsers.PythonWithConceptsParser import PythonWithConceptsParser
|
from parsers.PythonWithConceptsParser import PythonWithConceptsParser
|
||||||
from parsers.expressions import ParenthesisNode, OrNode, AndNode, NotNode, LeftPartNotFoundError, \
|
from parsers.BaseExpressionParser import ParenthesisNode, OrNode, AndNode, NotNode, LeftPartNotFoundError, \
|
||||||
ParenthesisMismatchError, NameExprNode, ExprNode, VariableNode, ComparisonNode
|
ParenthesisMismatchError, NameExprNode, ExprNode, VariableNode, ComparisonNode, BaseExpressionParser
|
||||||
from sheerkarete.common import V
|
from sheerkarete.common import V
|
||||||
from sheerkarete.conditions import Condition, AndConditions
|
from sheerkarete.conditions import Condition, AndConditions
|
||||||
|
|
||||||
@@ -63,7 +63,7 @@ class ReteConditionsEmitter:
|
|||||||
return [AndConditions(conditions)]
|
return [AndConditions(conditions)]
|
||||||
|
|
||||||
|
|
||||||
class LogicalOperatorParser(BaseExprParser):
|
class LogicalOperatorParser(BaseExpressionParser):
|
||||||
"""
|
"""
|
||||||
will parser logic expression
|
will parser logic expression
|
||||||
like not (a and b or c)
|
like not (a and b or c)
|
||||||
|
|||||||
@@ -2,12 +2,13 @@ from core.builtin_concepts_ids import BuiltinConcepts
|
|||||||
from core.sheerka.services.SheerkaExecute import ParserInput
|
from core.sheerka.services.SheerkaExecute import ParserInput
|
||||||
from core.tokenizer import TokenKind
|
from core.tokenizer import TokenKind
|
||||||
from core.utils import get_text_from_tokens
|
from core.utils import get_text_from_tokens
|
||||||
from parsers.BaseParser import UnexpectedTokenParsingError, BaseExprParser, ErrorSink
|
from parsers.BaseParser import UnexpectedTokenParsingError, ErrorSink
|
||||||
from parsers.expressions import ComparisonNode, ParenthesisMismatchError, NameExprNode, ComparisonType, VariableNode, \
|
from parsers.BaseExpressionParser import ComparisonNode, ParenthesisMismatchError, NameExprNode, ComparisonType, \
|
||||||
ParenthesisNode, LeftPartNotFoundError
|
VariableNode, \
|
||||||
|
ParenthesisNode, LeftPartNotFoundError, BaseExpressionParser
|
||||||
|
|
||||||
|
|
||||||
class RelationalOperatorParser(BaseExprParser):
|
class RelationalOperatorParser(BaseExpressionParser):
|
||||||
"""
|
"""
|
||||||
Parses xxx (== | > | < | >= | <= | != | in | not in) yyy
|
Parses xxx (== | > | < | >= | <= | != | in | not in) yyy
|
||||||
Nothing else
|
Nothing else
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ from parsers.BaseNodeParser import UnrecognizedTokensNode, SourceCodeNode, RuleN
|
|||||||
from parsers.FunctionParser import FunctionNode
|
from parsers.FunctionParser import FunctionNode
|
||||||
from parsers.PythonParser import PythonNode
|
from parsers.PythonParser import PythonNode
|
||||||
from parsers.SyaNodeParser import SyaConceptParserHelper
|
from parsers.SyaNodeParser import SyaConceptParserHelper
|
||||||
from parsers.expressions import NameExprNode, AndNode, OrNode, NotNode, VariableNode, ComparisonNode, ComparisonType, \
|
from parsers.BaseExpressionParser import NameExprNode, AndNode, OrNode, NotNode, VariableNode, ComparisonNode, ComparisonType, \
|
||||||
FunctionParameter
|
FunctionParameter
|
||||||
from sheerkarete.common import V
|
from sheerkarete.common import V
|
||||||
from sheerkarete.conditions import Condition, AndConditions
|
from sheerkarete.conditions import Condition, AndConditions
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from core.sheerka.services.SheerkaExecute import ParserInput
|
|||||||
from core.tokenizer import Tokenizer
|
from core.tokenizer import Tokenizer
|
||||||
from parsers.BaseParser import ErrorSink
|
from parsers.BaseParser import ErrorSink
|
||||||
from parsers.ExpressionParser import ExpressionParser
|
from parsers.ExpressionParser import ExpressionParser
|
||||||
from parsers.expressions import VariableNode
|
from parsers.BaseExpressionParser import VariableNode
|
||||||
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
|
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
|
||||||
from tests.parsers.parsers_utils import get_expr_node_from_test_node, VAR, EXPR, AND, OR, NOT, GT, GTE, LT, LTE, EQ, \
|
from tests.parsers.parsers_utils import get_expr_node_from_test_node, VAR, EXPR, AND, OR, NOT, GT, GTE, LT, LTE, EQ, \
|
||||||
NEQ, IN, NIN
|
NEQ, IN, NIN
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ from core.tokenizer import TokenKind
|
|||||||
from parsers.BaseParser import UnexpectedEofParsingError, UnexpectedTokenParsingError
|
from parsers.BaseParser import UnexpectedEofParsingError, UnexpectedTokenParsingError
|
||||||
from parsers.LogicalOperatorParser import LogicalOperatorParser
|
from parsers.LogicalOperatorParser import LogicalOperatorParser
|
||||||
from parsers.PythonParser import PythonNode
|
from parsers.PythonParser import PythonNode
|
||||||
from parsers.expressions import TrueifyVisitor, IsAQuestionVisitor, AndNode, LeftPartNotFoundError, \
|
from parsers.BaseExpressionParser import TrueifyVisitor, IsAQuestionVisitor, AndNode, LeftPartNotFoundError, \
|
||||||
ParenthesisMismatchError
|
ParenthesisMismatchError
|
||||||
from sheerkarete.network import ReteNetwork
|
from sheerkarete.network import ReteNetwork
|
||||||
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
|
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from core.sheerka.services.SheerkaExecute import ParserInput
|
|||||||
from core.tokenizer import TokenKind
|
from core.tokenizer import TokenKind
|
||||||
from parsers.BaseParser import UnexpectedTokenParsingError
|
from parsers.BaseParser import UnexpectedTokenParsingError
|
||||||
from parsers.RelationalOperatorParser import RelationalOperatorParser
|
from parsers.RelationalOperatorParser import RelationalOperatorParser
|
||||||
from parsers.expressions import ParenthesisMismatchError
|
from parsers.BaseExpressionParser import ParenthesisMismatchError
|
||||||
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
|
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
|
from tests.parsers.parsers_utils import get_expr_node_from_test_node, VAR, EXPR, EQ, NEQ, GT, GTE, LT, LTE, IN, NIN
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user