コード例 #1
0
 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()
コード例 #2
0
 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
コード例 #3
0
 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
コード例 #4
0
 def do_call(self, parser: BasicParser) -> Node:
     parser.push_rule_nodes()
     res = parser.eval_rule(self.name)
     parser.pop_rule_nodes()
     return res
コード例 #5
0
ファイル: functors.py プロジェクト: Py0s/KooC
 def do_call(self, parser: BasicParser) -> bool:
     parser.push_rule_nodes()
     while self.pt(parser):
         pass
     parser.pop_rule_nodes()
     return True
コード例 #6
0
 def do_call(self, parser: BasicParser) -> bool:
     parser.push_rule_nodes()
     while self.pt(parser):
         pass
     parser.pop_rule_nodes()
     return True