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,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