Enhanced ExecutionContext to keep track of the execution flow
This commit is contained in:
+23
-19
@@ -372,13 +372,15 @@ class DefaultParser(BaseParser):
|
||||
return NotInitializedNode()
|
||||
|
||||
regex_parser = BnfParser()
|
||||
new_context = self.context.push(self.name)
|
||||
parsing_result = regex_parser.parse(new_context, tokens)
|
||||
if not parsing_result.status:
|
||||
self.add_error(parsing_result.value)
|
||||
return NotInitializedNode()
|
||||
with self.context.push(self.name) as sub_context:
|
||||
parsing_result = regex_parser.parse(sub_context, tokens)
|
||||
sub_context.add_values(return_values=parsing_result)
|
||||
|
||||
return parsing_result
|
||||
if not parsing_result.status:
|
||||
self.add_error(parsing_result.value)
|
||||
return NotInitializedNode()
|
||||
|
||||
return parsing_result
|
||||
|
||||
def get_concept_parts(self, tokens_found_by_parts):
|
||||
asts_found_by_parts = {
|
||||
@@ -406,19 +408,21 @@ class DefaultParser(BaseParser):
|
||||
continue
|
||||
|
||||
# ask the other parsers if they recognize the tokens
|
||||
new_context = self.context.push(self.name, desc=f"Parsing {keyword}")
|
||||
new_context.log_new(self.verbose_log)
|
||||
to_parse = self.sheerka.ret(
|
||||
new_context.who,
|
||||
True,
|
||||
self.sheerka.new(BuiltinConcepts.USER_INPUT, body=tokens))
|
||||
steps = [BuiltinConcepts.PARSING]
|
||||
parsed = self.sheerka.execute(new_context, to_parse, steps, self.verbose_log)
|
||||
parsing_result = core.builtin_helpers.expect_one(new_context, parsed, self.verbose_log)
|
||||
if not parsing_result.status:
|
||||
self.add_error(parsing_result.value)
|
||||
continue
|
||||
with self.context.push(self.name, desc=f"Parsing {keyword}") as sub_context:
|
||||
sub_context.log_new(self.verbose_log)
|
||||
to_parse = self.sheerka.ret(
|
||||
sub_context.who,
|
||||
True,
|
||||
self.sheerka.new(BuiltinConcepts.USER_INPUT, body=tokens))
|
||||
steps = [BuiltinConcepts.PARSING]
|
||||
parsed = self.sheerka.execute(sub_context, to_parse, steps, self.verbose_log)
|
||||
parsing_result = core.builtin_helpers.expect_one(sub_context, parsed, self.verbose_log)
|
||||
sub_context.add_values(return_values=parsing_result)
|
||||
|
||||
asts_found_by_parts[keyword] = parsing_result
|
||||
if not parsing_result.status:
|
||||
self.add_error(parsing_result.value)
|
||||
continue
|
||||
|
||||
asts_found_by_parts[keyword] = parsing_result
|
||||
|
||||
return asts_found_by_parts
|
||||
|
||||
Reference in New Issue
Block a user