コード例 #1
0
 def _extend_cst(self, node):
     if node is None:
         return
     previous = self.cst
     if previous is None:
         self.cst = self._copy_node(node)
     elif is_list(node):
         if is_list(previous):
             previous.extend(node)
         else:
             self.cst = [previous] + node
     elif is_list(previous):
         previous.append(node)
     else:
         self.cst = [previous, node]
コード例 #2
0
 def _copy_node(self, node):
     if node is None:
         return None
     elif is_list(node):
         return node[:]
     else:
         return node
コード例 #3
0
 def _add_cst_node(self, node):
     if node is None:
         return
     previous = self.cst
     if previous is None:
         self.cst = self._copy_node(node)
     elif is_list(previous):
         previous.append(node)
     else:
         self.cst = [previous, node]
コード例 #4
0
ファイル: walkers.py プロジェクト: neogeny/TatSu
 def walk(self, node, *args, **kwargs):
     if isinstance(node, Node):
         children = [self.walk(c, *args, **kwargs) for c in node.children()]
         return super().walk(node, children, *args, **kwargs)
     elif isinstance(node, Mapping):
         return {n: self.walk(e, *args, **kwargs) for n, e in node.items()}
     elif is_list(node):
         return [self.walk(e, *args, **kwargs) for e in iter(node)]
     else:
         return super().walk(node, [], *args, **kwargs)
コード例 #5
0
 def walk(self, node, *args, **kwargs):
     supers_walk = super(DepthFirstWalker, self).walk
     if isinstance(node, Node):
         children = [self.walk(c, *args, **kwargs) for c in node.children()]
         return supers_walk(node, children, *args, **kwargs)
     elif isinstance(node, collections.Mapping):
         return {n: self.walk(e, *args, **kwargs) for n, e in node.items()}
     elif is_list(node):
         return [self.walk(e, *args, **kwargs) for e in iter(node)]
     else:
         return supers_walk(node, [], *args, **kwargs)
コード例 #6
0
ファイル: walkers.py プロジェクト: asquare14/save-to-calendar
 def walk(self, node, *args, **kwargs):
     supers_walk = super(DepthFirstWalker, self).walk
     if isinstance(node, Node):
         children = [self.walk(c, *args, **kwargs) for c in node.children()]
         return supers_walk(node, children, *args, **kwargs)
     elif isinstance(node, collections.Mapping):
         return {n: self.walk(e, *args, **kwargs) for n, e in node.items()}
     elif is_list(node):
         return [self.walk(e, *args, **kwargs) for e in iter(node)]
     else:
         return supers_walk(node, [], *args, **kwargs)
コード例 #7
0
    def _isolate(self, block, drop=False):
        self._push_cst()
        try:
            block()
            cst = self.cst
        finally:
            self._pop_cst()

        if is_list(cst):
            cst = closure(cst)
        if not drop:
            self._add_cst_node(cst)
        return cst
コード例 #8
0
    def _isolate(self, block, drop=False):
        self._push_cst()
        try:
            block()
            cst = self.cst
        finally:
            self._pop_cst()

        if is_list(cst):
            cst = closure(cst)
        if not drop:
            self._add_cst_node(cst)
        return cst
コード例 #9
0
    def _set(self, key, value, force_list=False):
        key = self._safekey(key)
        previous = self.get(key)

        if previous is None and force_list:
            value = [value]
        elif previous is None:
            value = value
        elif is_list(previous):
            value = previous + [value]
        else:
            value = [previous, value]

        super().__setitem__(key, value)
コード例 #10
0
ファイル: ast.py プロジェクト: sdcloudt/TatSu
    def set(self, key, value, force_list=False):
        key = self._safekey(key)

        previous = self.get(key)
        if previous is None:
            if force_list:
                super().__setitem__(key, [value])
            else:
                super().__setitem__(key, value)
            self._order.append(key)
        elif is_list(previous):
            previous.append(value)
        else:
            super().__setitem__(key, [previous, value])
        return self
コード例 #11
0
    def set(self, key, value, force_list=False):
        key = self._safekey(key)

        previous = self.get(key)
        if previous is None:
            if force_list:
                super(AST, self).__setitem__(key, [value])
            else:
                super(AST, self).__setitem__(key, value)
            self._order.append(key)
        elif is_list(previous):
            previous.append(value)
        else:
            super(AST, self).__setitem__(key, [previous, value])
        return self
コード例 #12
0
 def _save_result(self, key, result):
     if is_list(result.node):
         result = RuleResult(closure(result.node), result.newpos,
                             result.newstate)
     self._results[key] = result
コード例 #13
0
ファイル: ast.py プロジェクト: sdcloudt/TatSu
 def copy(self):
     return AST((k, v[:] if is_list(v) else v) for k, v in self.items())
コード例 #14
0
 def _save_result(self, key, node):
     if is_list(node):
         node = closure(node)
     self._results[key] = self._mkresult(node)
コード例 #15
0
 def _save_result(self, key, node):
     if is_list(node):
         node = closure(node)
     self._results[key] = self._mkresult(node)
コード例 #16
0
 def copy(self):
     return AST(
         (k, v[:] if is_list(v) else v)
         for k, v in self.items()
     )