Implemented some enhancement requests
This commit is contained in:
@@ -14,7 +14,7 @@ from core.tokenizer import Token, TokenKind, Tokenizer
|
||||
from core.utils import get_n_clones, get_text_from_tokens, NextIdManager
|
||||
from parsers.BaseNodeParser import UnrecognizedTokensNode, ConceptNode, SourceCodeNode, SyaAssociativity, \
|
||||
SourceCodeWithConceptNode, BaseNodeParser
|
||||
from parsers.BaseParser import ErrorNode
|
||||
from parsers.BaseParser import ParsingError
|
||||
|
||||
PARSERS = ["Sequence", "Bnf", "Python"]
|
||||
|
||||
@@ -53,7 +53,7 @@ class DebugInfo:
|
||||
return msg + f" => {self.action}"
|
||||
|
||||
|
||||
class ParenthesisMismatchErrorNode(ErrorNode):
|
||||
class ParenthesisMismatchError(ParsingError):
|
||||
|
||||
def __init__(self, error_int):
|
||||
if isinstance(error_int, tuple):
|
||||
@@ -79,7 +79,7 @@ class ParenthesisMismatchErrorNode(ErrorNode):
|
||||
if id(self) == id(other):
|
||||
return True
|
||||
|
||||
if not isinstance(other, ParenthesisMismatchErrorNode):
|
||||
if not isinstance(other, ParenthesisMismatchError):
|
||||
return False
|
||||
|
||||
return self.token_value == other.token_value and self.pos == other.pos
|
||||
@@ -88,11 +88,11 @@ class ParenthesisMismatchErrorNode(ErrorNode):
|
||||
return hash(self.pos)
|
||||
|
||||
def __repr__(self):
|
||||
return f"ParenthesisMismatchErrorNode('{self.token_value}', {self.pos}"
|
||||
return f"ParenthesisMismatchError('{self.token_value}', {self.pos}"
|
||||
|
||||
|
||||
@dataclass()
|
||||
class NoneAssociativeSequenceErrorNode(ErrorNode):
|
||||
class NoneAssociativeSequenceError(ParsingError):
|
||||
concept: Concept
|
||||
first: int
|
||||
second: int
|
||||
@@ -100,7 +100,7 @@ class NoneAssociativeSequenceErrorNode(ErrorNode):
|
||||
|
||||
|
||||
@dataclass()
|
||||
class TooManyParametersFound(ErrorNode):
|
||||
class TooManyParametersFoundError(ParsingError):
|
||||
concept: Concept
|
||||
pos: int # position of the concept
|
||||
token: Token # token of the concept where the error was noticed
|
||||
@@ -532,7 +532,7 @@ class InFixToPostFix:
|
||||
|
||||
# manage parenthesis that didn't find any match
|
||||
if self._is_lpar(self.stack[-1]):
|
||||
self._add_error(ParenthesisMismatchErrorNode(self.stack[-1]))
|
||||
self._add_error(ParenthesisMismatchError(self.stack[-1]))
|
||||
|
||||
# The parameter must be part the current concept being parsed
|
||||
assert len(self._concepts()) != 0 # sanity check
|
||||
@@ -560,7 +560,7 @@ class InFixToPostFix:
|
||||
|
||||
if self.unrecognized_tokens.parenthesis_count > 0:
|
||||
# parenthesis mismatch detected, do not try to resolve the unrecognized
|
||||
self._add_error(ParenthesisMismatchErrorNode(self.unrecognized_tokens))
|
||||
self._add_error(ParenthesisMismatchError(self.unrecognized_tokens))
|
||||
self._put_to_out(self.unrecognized_tokens)
|
||||
else:
|
||||
# try to recognize concepts
|
||||
@@ -676,7 +676,7 @@ class InFixToPostFix:
|
||||
|
||||
if stack.associativity == SyaAssociativity.No and current.associativity == SyaAssociativity.No:
|
||||
self._add_error(
|
||||
NoneAssociativeSequenceErrorNode(current.concept, stack_head.start, sya_parser_helper.start))
|
||||
NoneAssociativeSequenceError(current.concept, stack_head.start, sya_parser_helper.start))
|
||||
|
||||
if current.associativity == SyaAssociativity.Left and current.precedence <= stack.precedence:
|
||||
if self.debug_enabled:
|
||||
@@ -719,7 +719,7 @@ class InFixToPostFix:
|
||||
self.pop_stack_to_out()
|
||||
|
||||
if self._is_lpar(self.stack[-1]):
|
||||
self._add_error(ParenthesisMismatchErrorNode(self.stack[-1]))
|
||||
self._add_error(ParenthesisMismatchError(self.stack[-1]))
|
||||
return False
|
||||
|
||||
# Manage concepts ending with long names
|
||||
@@ -777,7 +777,7 @@ class InFixToPostFix:
|
||||
if len(self.parameters_list) > len(current_concept.parameters_list_at_init):
|
||||
# we have eaten the parameters expected between two expected tokens
|
||||
# But there are some remaining parameters
|
||||
self._add_error(TooManyParametersFound(
|
||||
self._add_error(TooManyParametersFoundError(
|
||||
current_concept.concept.concept,
|
||||
current_concept.start,
|
||||
token,
|
||||
@@ -951,7 +951,7 @@ class InFixToPostFix:
|
||||
|
||||
# checks consistency if an lpar is found
|
||||
if len(self.stack) == 0:
|
||||
self._add_error(ParenthesisMismatchErrorNode((token, pos)))
|
||||
self._add_error(ParenthesisMismatchError((token, pos)))
|
||||
return None
|
||||
|
||||
if self._stack_isinstance(UnrecognizedTokensNode):
|
||||
@@ -962,7 +962,7 @@ class InFixToPostFix:
|
||||
start = i
|
||||
break
|
||||
else:
|
||||
self._add_error(ParenthesisMismatchErrorNode((token, pos)))
|
||||
self._add_error(ParenthesisMismatchError((token, pos)))
|
||||
return None
|
||||
|
||||
source_code = self._make_source_code_with_concept(start, token, pos)
|
||||
@@ -1073,7 +1073,7 @@ class InFixToPostFix:
|
||||
if len(self.stack) == 0 and len(self.out) == 0:
|
||||
# check for parenthesis mismatch
|
||||
if self.unrecognized_tokens.parenthesis_count > 0:
|
||||
self._add_error(ParenthesisMismatchErrorNode(self.unrecognized_tokens))
|
||||
self._add_error(ParenthesisMismatchError(self.unrecognized_tokens))
|
||||
return # no need to pop the buffer, as no concept is found
|
||||
|
||||
if self.debug_enabled:
|
||||
@@ -1084,7 +1084,7 @@ class InFixToPostFix:
|
||||
|
||||
# validate parenthesis
|
||||
if self._is_lpar(parser_helper) or self._is_rpar(parser_helper):
|
||||
self._add_error(ParenthesisMismatchErrorNode(parser_helper))
|
||||
self._add_error(ParenthesisMismatchError(parser_helper))
|
||||
return None
|
||||
|
||||
self.manage_unrecognized()
|
||||
|
||||
Reference in New Issue
Block a user