def do_call(self, parser: BasicParser) -> bool: parser._stream.save_context() parser.push_rule_nodes() while self.pt(parser): pass parser.pop_rule_nodes() return parser._stream.validate_context()
def do_call(self, parser: BasicParser) -> Node: if parser.begin_tag(self.tagname): # subcontext parser.push_rule_nodes() res = self.pt(parser) parser.pop_rule_nodes() if res and parser.end_tag(self.tagname): tag = parser.get_tag(self.tagname) # no bindings, wrap it in a Node instance if type(res) is bool: res = Node() # update node cache parser.tag_node(self.tagname, res) parser.rule_nodes[self.tagname] = res # forward nodes return res return False
def do_call(self, parser: BasicParser) -> Node: # save result of current rule parser.push_rule_nodes() for pt in self.ptlist: parser._stream.save_context() parser.push_rule_nodes() res = pt(parser) if res: parser.pop_rule_nodes() parser.pop_rule_nodes() parser._stream.validate_context() return res parser.pop_rule_nodes() parser._stream.restore_context() parser.pop_rule_nodes() return False
def do_call(self, parser: BasicParser) -> Node: parser.push_rule_nodes() res = parser.eval_rule(self.name) parser.pop_rule_nodes() return res
def do_call(self, parser: BasicParser) -> bool: parser.push_rule_nodes() while self.pt(parser): pass parser.pop_rule_nodes() return True
def do_call(self, parser: BasicParser) -> bool: parser.push_rule_nodes() while self.pt(parser): pass parser.pop_rule_nodes() return True