Refactored parsers to introduce priority

This commit is contained in:
2020-01-08 19:45:54 +01:00
parent b4346b5af0
commit a62c1f0f13
13 changed files with 531 additions and 42 deletions
+7 -1
View File
@@ -38,12 +38,15 @@ class UnexpectedTokenErrorNode(ErrorNode):
class BaseParser:
PREFIX = "parsers."
def __init__(self, name):
def __init__(self, name, priority: int, enabled=True):
self.log = get_logger("parsers." + self.__class__.__name__)
self.init_log = get_logger("init." + self.PREFIX + self.__class__.__name__)
self.verbose_log = get_logger("verbose." + self.PREFIX + self.__class__.__name__)
self.name = self.PREFIX + name
self.priority = priority
self.enabled = enabled
self.has_error = False
self.error_sink = []
@@ -55,6 +58,9 @@ class BaseParser:
def __hash__(self):
return hash(self.name)
def __repr__(self):
return self.name
def parse(self, context, text):
pass
+6 -5
View File
@@ -13,7 +13,7 @@ class UnexpectedEndOfFileError(ErrorNode):
pass
class BnfParser:
class BnfParser(BaseParser):
"""
Parser used to transform litteral into ParsingExpression
example :
@@ -27,10 +27,11 @@ class BnfParser:
"""
def __init__(self):
self.has_error = False
self.error_sink = []
self.name = BaseParser.PREFIX + "Bnf"
def __init__(self, **kwargs):
super().__init__("Bnf", 50, False)
# self.has_error = False
# self.error_sink = []
# self.name = BaseParser.PREFIX + "Bnf"
self.lexer_iter = None
self._current = None
+1 -1
View File
@@ -524,7 +524,7 @@ class ConceptMatch(Match):
class ConceptLexerParser(BaseParser):
def __init__(self, **kwargs):
super().__init__("ConceptLexer")
super().__init__("ConceptLexer", 50)
if 'grammars' in kwargs:
self.concepts_grammars = kwargs.get("grammars")
elif 'sheerka' in kwargs:
+1 -1
View File
@@ -108,7 +108,7 @@ class DefaultParser(BaseParser):
"""
def __init__(self, **kwargs):
BaseParser.__init__(self, "Default")
BaseParser.__init__(self, "Default", 50)
self.lexer_iter = None
self._current = None
self.context: ExecutionContext = None
+1 -1
View File
@@ -8,7 +8,7 @@ class EmptyStringParser(BaseParser):
"""
def __init__(self, **kwargs):
BaseParser.__init__(self, "EmptyString")
BaseParser.__init__(self, "EmptyString", 90)
def parse(self, context, text):
sheerka = context.sheerka
+1 -1
View File
@@ -14,7 +14,7 @@ class ExactConceptParser(BaseParser):
MAX_WORDS_SIZE = 10
def __init__(self, **kwargs):
BaseParser.__init__(self, "ExactConcept")
BaseParser.__init__(self, "ExactConcept", 80)
def parse(self, context, text):
"""
+1 -1
View File
@@ -59,7 +59,7 @@ class PythonParser(BaseParser):
def __init__(self, **kwargs):
BaseParser.__init__(self, "Python")
BaseParser.__init__(self, "Python", 50)
self.source = kwargs.get("source", "<undef>")
def parse(self, context, text):