Working on #48 : Working
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user