Fixed #20: I can parse simple concepts
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
from core.BuiltinConcepts import BuiltinConcepts
|
||||
from core.ExecutionContext import ContextActions, ExecutionContext
|
||||
from core.ReturnValue import ReturnValue
|
||||
from core.concept import Concept
|
||||
from evaluators.base_evaluator import EvaluatorEvalResult, EvaluatorMatchResult, NotForMe, OneReturnValueEvaluator
|
||||
from parsers.SimpleParserParser import SimpleConceptsParser
|
||||
from parsers.state_machine import MetadataToken
|
||||
|
||||
|
||||
class RecognizeSimpleConcept(OneReturnValueEvaluator):
|
||||
"""
|
||||
class that recognizes concepts in the input
|
||||
It only focuses on concepts thot do not require parameter
|
||||
"""
|
||||
NAME = "RecognizeSimpleConcept"
|
||||
|
||||
def __init__(self):
|
||||
super().__init__(self.NAME, ContextActions.PARSING, 80)
|
||||
self.parser = SimpleConceptsParser()
|
||||
|
||||
def matches(self, context: ExecutionContext, return_value: ReturnValue) -> EvaluatorMatchResult:
|
||||
return EvaluatorMatchResult(return_value.status and
|
||||
context.sheerka.isinstance(return_value.value, BuiltinConcepts.PARSER_INPUT))
|
||||
|
||||
def eval(self, context: ExecutionContext,
|
||||
evaluation_context: object,
|
||||
return_value: ReturnValue) -> EvaluatorEvalResult:
|
||||
parser_input = return_value.value.body
|
||||
parser_input.reset()
|
||||
|
||||
parsed = self.parser.parse(context, parser_input)
|
||||
|
||||
if len(parsed.items) == 0:
|
||||
not_for_me = ReturnValue(self.NAME, False, NotForMe(self.NAME, return_value.value))
|
||||
return EvaluatorEvalResult([not_for_me], [])
|
||||
|
||||
new = []
|
||||
for sequence in parsed.items:
|
||||
instantiated = []
|
||||
has_unrecognized = False
|
||||
for item in sequence:
|
||||
# instantiate the concept
|
||||
if isinstance(item, MetadataToken):
|
||||
concept = context.sheerka.newi(item.metadata.id)
|
||||
concept.get_runtime_info().info["resolution_method"] = item.resolution_method
|
||||
instantiated.append(concept)
|
||||
else:
|
||||
instantiated.append(item.buffer)
|
||||
has_unrecognized = True
|
||||
|
||||
if has_unrecognized:
|
||||
parser_result = context.sheerka.newn(BuiltinConcepts.PARSER_RESULT, result=instantiated)
|
||||
new.append(ReturnValue(self.NAME, False, parser_result, [return_value]))
|
||||
else:
|
||||
# remove whitespaces first
|
||||
instantiated = [item for item in instantiated if isinstance(item, Concept) or not item.isspace()]
|
||||
to_return = instantiated[0] if len(instantiated) == 1 else instantiated
|
||||
new.append(ReturnValue(self.NAME, True, to_return, [return_value]))
|
||||
|
||||
return EvaluatorEvalResult(new, [return_value])
|
||||
Reference in New Issue
Block a user