Refactored Parsers. Introduced BaseCustomGrammarParser. Renamed DefaultParser into DefConceptParser

This commit is contained in:
2020-10-02 04:45:47 +02:00
parent d100b7e8b3
commit e8f2705dcf
28 changed files with 1411 additions and 872 deletions
+5 -4
View File
@@ -5,7 +5,7 @@ from core.builtin_concepts import BuiltinConcepts
from core.concept import Concept
from core.sheerka.services.SheerkaExecute import ParserInput
from core.tokenizer import LexerError, TokenKind, Token
from parsers.BaseParser import Node, BaseParser, UnexpectedTokenErrorNode, UnexpectedEof, ErrorNode
from parsers.BaseParser import Node, BaseParser, UnexpectedTokenErrorNode, UnexpectedEofNode, ErrorNode
class ExprNode(Node):
@@ -189,7 +189,7 @@ class ExpressionParser(BaseParser):
"""
def __init__(self, **kwargs):
super().__init__("Expression", 50, False)
super().__init__("Expression", 50, False, yield_eof=True)
def parse(self, context, parser_input: ParserInput):
"""
@@ -215,6 +215,7 @@ class ExpressionParser(BaseParser):
False,
context.sheerka.new(BuiltinConcepts.ERROR, body=self.error_sink))
self.parser_input.next_token()
tree = self.parse_or()
token = self.parser_input.token
if token and token.type != TokenKind.EOF:
@@ -240,7 +241,7 @@ class ExpressionParser(BaseParser):
self.parser_input.next_token()
expr = self.parse_and()
if expr is None:
self.add_error(UnexpectedEof("When parsing 'or'"))
self.add_error(UnexpectedEofNode("When parsing 'or'"))
return OrNode(*parts)
parts.append(expr)
token = self.parser_input.token
@@ -258,7 +259,7 @@ class ExpressionParser(BaseParser):
self.parser_input.next_token()
expr = self.parse_names()
if expr is None:
self.add_error(UnexpectedEof("When parsing 'and'"))
self.add_error(UnexpectedEofNode("When parsing 'and'"))
return AndNode(*parts)
parts.append(expr)
token = self.parser_input.token