Refactored sheerka execution flow + Enhanced log management
This commit is contained in:
@@ -13,9 +13,6 @@ from core.concept import Concept
|
||||
from core.tokenizer import TokenKind, Tokenizer, Token
|
||||
from parsers.BaseParser import BaseParser, Node, ErrorNode
|
||||
import core.utils
|
||||
import logging
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def flatten(iterable):
|
||||
@@ -588,8 +585,8 @@ class ConceptLexerParser(BaseParser):
|
||||
return self.sheerka.ret(self.name, True, self.concepts_grammars)
|
||||
|
||||
def get_concept(self, concept_name):
|
||||
if concept_name in self.context.concepts_cache:
|
||||
return self.context.concepts_cache[concept_name]
|
||||
if concept_name in self.context.concepts:
|
||||
return self.context.concepts[concept_name]
|
||||
return self.sheerka.get(concept_name)
|
||||
|
||||
def get_model(self, concept_def, concepts_to_resolve):
|
||||
@@ -668,6 +665,9 @@ class ConceptLexerParser(BaseParser):
|
||||
if self.sheerka.isinstance(e, BuiltinConcepts.UNKNOWN_CONCEPT):
|
||||
continue
|
||||
|
||||
if e not in self.concepts_grammars:
|
||||
continue
|
||||
|
||||
to_resolve = self.concepts_grammars[e]
|
||||
if _is_infinite_recursion(e, to_resolve):
|
||||
removed_concepts.append(e)
|
||||
@@ -730,7 +730,7 @@ class ConceptLexerParser(BaseParser):
|
||||
|
||||
# manage when nothing is recognized (or other error)
|
||||
if self.has_error:
|
||||
return self.sheerka.ret(
|
||||
ret = self.sheerka.ret(
|
||||
self.name,
|
||||
False,
|
||||
self.sheerka.new(
|
||||
@@ -739,6 +739,8 @@ class ConceptLexerParser(BaseParser):
|
||||
source=text,
|
||||
body=self.error_sink,
|
||||
try_parsed=concepts_found[0] if len(concepts_found) == 1 else concepts_found))
|
||||
self.log_result(context, text, ret)
|
||||
return ret
|
||||
|
||||
# else
|
||||
# returns as many ReturnValue than choices found
|
||||
@@ -755,7 +757,12 @@ class ConceptLexerParser(BaseParser):
|
||||
body=choice,
|
||||
try_parsed=choice)))
|
||||
|
||||
return ret[0] if len(ret) == 1 else ret
|
||||
if len(ret) == 1:
|
||||
self.log_result(context, text, ret[0])
|
||||
return ret[0]
|
||||
else:
|
||||
self.log_multiple_results(context, text, ret)
|
||||
return ret
|
||||
|
||||
@staticmethod
|
||||
def get_bests(results):
|
||||
|
||||
Reference in New Issue
Block a user