Working on #48 : Working

This commit is contained in:
2021-03-11 15:28:24 +01:00
parent 8f51893f53
commit 30c99b2d67
14 changed files with 60 additions and 55 deletions
+1 -1
View File
@@ -790,7 +790,7 @@ def is_a_question(context, concept):
return False
node = res.body.body
from parsers.expressions import IsAQuestionVisitor
from parsers.BaseExpressionParser import IsAQuestionVisitor
return IsAQuestionVisitor().is_a_question(node)
+3 -1
View File
@@ -278,7 +278,9 @@ class Sheerka(Concept):
"""
core.utils.import_module_and_sub_module("parsers")
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 = {}
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 parsers.BaseNodeParser import ConceptNode
from parsers.LogicalOperatorParser import LogicalOperatorParser
from parsers.expressions import TrueifyVisitor
from parsers.BaseExpressionParser import TrueifyVisitor
CONCEPT_EVALUATION_STEPS = [
BuiltinConcepts.BEFORE_EVALUATION,
@@ -20,7 +20,7 @@ from evaluators.PythonEvaluator import PythonEvaluator, Expando
from parsers.BaseNodeParser import SourceCodeWithConceptNode, ConceptNode, SourceCodeNode
from parsers.LogicalOperatorParser import LogicalOperatorParser
from parsers.PythonParser import PythonNode
from parsers.expressions import AndNode
from parsers.BaseExpressionParser import AndNode
from sheerkarete.conditions import AndConditions
CONCEPTS_ONLY_PARSERS = ["ExactConcept", "Bnf", "Sya", "Sequence"]
@@ -1,10 +1,11 @@
from dataclasses import dataclass
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 parsers.BaseNodeParser import UnrecognizedTokensNode
from parsers.BaseParser import Node, ParsingError
from parsers.BaseParser import Node, ParsingError, BaseParser
class ComparisonType:
@@ -328,6 +329,23 @@ class FunctionNode(ExprNode):
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:
"""
Pyhtonic implementation of visitors for ExprNode
+15 -31
View File
@@ -9,6 +9,21 @@ from core.sheerka.services.SheerkaExecute import ParserInput
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()
class Node:
pass
@@ -244,34 +259,3 @@ class BaseParserInputParser(BaseParser):
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
+4 -4
View File
@@ -2,14 +2,14 @@ from core.builtin_concepts_ids import BuiltinConcepts
from core.sheerka.services.SheerkaExecute import ParserInput
from core.tokenizer import TokenKind
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.LogicalOperatorParser import LogicalOperatorParser
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
"""
@@ -74,7 +74,7 @@ class ExpressionParser(BaseExprParser):
return None
class VariableOrNamesParser(BaseExprParser):
class VariableOrNamesParser(BaseExpressionParser):
NAME = "VariableOrNames"
def __init__(self, **kwargs):
+2 -2
View File
@@ -7,14 +7,14 @@ from core.sheerka.services.SheerkaExecute import ParserInput
from core.tokenizer import TokenKind
from core.utils import get_n_clones
from parsers.BaseNodeParser import SourceCodeNode, SourceCodeWithConceptNode
from parsers.BaseParser import UnexpectedTokenParsingError, UnexpectedEofParsingError, Node, BaseExprParser, \
from parsers.BaseParser import UnexpectedTokenParsingError, UnexpectedEofParsingError, Node, \
BaseParserInputParser
from parsers.BnfNodeParser import BnfNodeParser
from parsers.PythonWithConceptsParser import PythonWithConceptsParser
from parsers.RuleParser import RuleParser
from parsers.SequenceNodeParser import SequenceNodeParser
from parsers.SyaNodeParser import SyaNodeParser
from parsers.expressions import NameExprNode, FunctionNode, FunctionParameter
from parsers.BaseExpressionParser import NameExprNode, FunctionNode, FunctionParameter
PARSERS = [RuleParser.NAME,
SequenceNodeParser.NAME,
+4 -4
View File
@@ -7,10 +7,10 @@ from core.sheerka.services.sheerka_service import FailedToCompileError
from core.tokenizer import TokenKind, Tokenizer, Keywords
from core.utils import get_text_from_tokens
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.expressions import ParenthesisNode, OrNode, AndNode, NotNode, LeftPartNotFoundError, \
ParenthesisMismatchError, NameExprNode, ExprNode, VariableNode, ComparisonNode
from parsers.BaseExpressionParser import ParenthesisNode, OrNode, AndNode, NotNode, LeftPartNotFoundError, \
ParenthesisMismatchError, NameExprNode, ExprNode, VariableNode, ComparisonNode, BaseExpressionParser
from sheerkarete.common import V
from sheerkarete.conditions import Condition, AndConditions
@@ -63,7 +63,7 @@ class ReteConditionsEmitter:
return [AndConditions(conditions)]
class LogicalOperatorParser(BaseExprParser):
class LogicalOperatorParser(BaseExpressionParser):
"""
will parser logic expression
like not (a and b or c)
+5 -4
View File
@@ -2,12 +2,13 @@ from core.builtin_concepts_ids import BuiltinConcepts
from core.sheerka.services.SheerkaExecute import ParserInput
from core.tokenizer import TokenKind
from core.utils import get_text_from_tokens
from parsers.BaseParser import UnexpectedTokenParsingError, BaseExprParser, ErrorSink
from parsers.expressions import ComparisonNode, ParenthesisMismatchError, NameExprNode, ComparisonType, VariableNode, \
ParenthesisNode, LeftPartNotFoundError
from parsers.BaseParser import UnexpectedTokenParsingError, ErrorSink
from parsers.BaseExpressionParser import ComparisonNode, ParenthesisMismatchError, NameExprNode, ComparisonType, \
VariableNode, \
ParenthesisNode, LeftPartNotFoundError, BaseExpressionParser
class RelationalOperatorParser(BaseExprParser):
class RelationalOperatorParser(BaseExpressionParser):
"""
Parses xxx (== | > | < | >= | <= | != | in | not in) yyy
Nothing else
+1 -1
View File
@@ -13,7 +13,7 @@ from parsers.BaseNodeParser import UnrecognizedTokensNode, SourceCodeNode, RuleN
from parsers.FunctionParser import FunctionNode
from parsers.PythonParser import PythonNode
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
from sheerkarete.common import V
from sheerkarete.conditions import Condition, AndConditions
+1 -1
View File
@@ -5,7 +5,7 @@ from core.sheerka.services.SheerkaExecute import ParserInput
from core.tokenizer import Tokenizer
from parsers.BaseParser import ErrorSink
from parsers.ExpressionParser import ExpressionParser
from parsers.expressions import VariableNode
from parsers.BaseExpressionParser import VariableNode
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, \
NEQ, IN, NIN
+1 -1
View File
@@ -10,7 +10,7 @@ from core.tokenizer import TokenKind
from parsers.BaseParser import UnexpectedEofParsingError, UnexpectedTokenParsingError
from parsers.LogicalOperatorParser import LogicalOperatorParser
from parsers.PythonParser import PythonNode
from parsers.expressions import TrueifyVisitor, IsAQuestionVisitor, AndNode, LeftPartNotFoundError, \
from parsers.BaseExpressionParser import TrueifyVisitor, IsAQuestionVisitor, AndNode, LeftPartNotFoundError, \
ParenthesisMismatchError
from sheerkarete.network import ReteNetwork
from tests.TestUsingMemoryBasedSheerka import TestUsingMemoryBasedSheerka
@@ -5,7 +5,7 @@ from core.sheerka.services.SheerkaExecute import ParserInput
from core.tokenizer import TokenKind
from parsers.BaseParser import UnexpectedTokenParsingError
from parsers.RelationalOperatorParser import RelationalOperatorParser
from parsers.expressions import ParenthesisMismatchError
from parsers.BaseExpressionParser 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