Added first version of DebugManager. Implemented draft of the rule engine
This commit is contained in:
+51
-48
@@ -4,6 +4,7 @@ from typing import Union
|
||||
|
||||
from core.builtin_concepts import BuiltinConcepts, ParserResultConcept
|
||||
from core.concept import Concept
|
||||
from core.error import ErrorObj
|
||||
from core.sheerka.ExecutionContext import ExecutionContext
|
||||
from core.sheerka.services.SheerkaExecute import ParserInput
|
||||
from core.sheerka_logger import get_logger
|
||||
@@ -50,7 +51,7 @@ class NotInitializedNode(Node):
|
||||
|
||||
|
||||
@dataclass()
|
||||
class ErrorNode(Node):
|
||||
class ErrorNode(Node, ErrorObj):
|
||||
pass
|
||||
|
||||
|
||||
@@ -89,9 +90,9 @@ class BaseParser:
|
||||
PREFIX = "parsers."
|
||||
|
||||
def __init__(self, name, priority: int, enabled=True, yield_eof=False):
|
||||
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.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
|
||||
@@ -141,23 +142,25 @@ class BaseParser:
|
||||
return len(self.error_sink) > 0
|
||||
|
||||
def log_result(self, context, source, ret):
|
||||
if not self.log.isEnabledFor(logging.DEBUG):
|
||||
return
|
||||
|
||||
if ret.status:
|
||||
value = context.return_value_to_str(ret)
|
||||
context.log(f"Recognized '{source}' as {value}", self.name)
|
||||
else:
|
||||
context.log(f"Failed to recognize '{source}'", self.name)
|
||||
pass
|
||||
# if not self.log.isEnabledFor(logging.DEBUG):
|
||||
# return
|
||||
#
|
||||
# if ret.status:
|
||||
# value = context.return_value_to_str(ret)
|
||||
# context.log(f"Recognized '{source}' as {value}", self.name)
|
||||
# else:
|
||||
# context.log(f"Failed to recognize '{source}'", self.name)
|
||||
|
||||
def log_multiple_results(self, context, source, list_of_ret):
|
||||
if not self.log.isEnabledFor(logging.DEBUG):
|
||||
return
|
||||
|
||||
context.log(f"Recognized '{source}' as multiple concepts", self.name)
|
||||
for r in list_of_ret:
|
||||
value = context.return_value_to_str(r)
|
||||
context.log(f" Recognized '{value}'", self.name)
|
||||
pass
|
||||
# if not self.log.isEnabledFor(logging.DEBUG):
|
||||
# return
|
||||
#
|
||||
# context.log(f"Recognized '{source}' as multiple concepts", self.name)
|
||||
# for r in list_of_ret:
|
||||
# value = context.return_value_to_str(r)
|
||||
# context.log(f" Recognized '{value}'", self.name)
|
||||
|
||||
def get_return_value_body(self, sheerka, source, parsed, try_parse):
|
||||
"""
|
||||
@@ -221,35 +224,35 @@ class BaseParser:
|
||||
lst.append(Token(TokenKind.EOF, "", -1, -1, -1))
|
||||
return lst
|
||||
|
||||
@staticmethod
|
||||
def get_text_from_tokens(tokens, custom_switcher=None, tracker=None):
|
||||
"""
|
||||
Create the source code, from the list of token
|
||||
:param tokens: list of tokens
|
||||
:param custom_switcher: to override the behaviour (the return value) of some token
|
||||
:param tracker: keep track of the original token value when custom switched
|
||||
:return:
|
||||
"""
|
||||
if tokens is None:
|
||||
return ""
|
||||
res = ""
|
||||
|
||||
if not hasattr(tokens, "__iter__"):
|
||||
tokens = [tokens]
|
||||
|
||||
switcher = {
|
||||
# TokenKind.CONCEPT: lambda t: core.utils.str_concept(t.value),
|
||||
}
|
||||
|
||||
if custom_switcher:
|
||||
switcher.update(custom_switcher)
|
||||
|
||||
for token in tokens:
|
||||
value = switcher.get(token.type, lambda t: t.str_value)(token)
|
||||
res += value
|
||||
if tracker is not None and token.type in custom_switcher:
|
||||
tracker[value] = token.value
|
||||
return res
|
||||
# @staticmethod
|
||||
# def get_text_from_tokens(tokens, custom_switcher=None, tracker=None):
|
||||
# """
|
||||
# Create the source code, from the list of token
|
||||
# :param tokens: list of tokens
|
||||
# :param custom_switcher: to override the behaviour (the return value) of some token
|
||||
# :param tracker: keep track of the original token value when custom switched
|
||||
# :return:
|
||||
# """
|
||||
# if tokens is None:
|
||||
# return ""
|
||||
# res = ""
|
||||
#
|
||||
# if not hasattr(tokens, "__iter__"):
|
||||
# tokens = [tokens]
|
||||
#
|
||||
# switcher = {
|
||||
# # TokenKind.CONCEPT: lambda t: core.utils.str_concept(t.value),
|
||||
# }
|
||||
#
|
||||
# if custom_switcher:
|
||||
# switcher.update(custom_switcher)
|
||||
#
|
||||
# for token in tokens:
|
||||
# value = switcher.get(token.type, lambda t: t.str_value)(token)
|
||||
# res += value
|
||||
# if tracker is not None and token.type in custom_switcher:
|
||||
# tracker[value] = token.value
|
||||
# return res
|
||||
|
||||
@staticmethod
|
||||
def get_tokens_boundaries(tokens):
|
||||
|
||||
Reference in New Issue
Block a user