ソースを参照

Merge pull request #51 from kevinlatimer/master

Add Discard feature to transformers
tags/gm/2021-09-23T00Z/github.com--lark-parser-lark/0.5.1
Erez Shinan 6年前
committed by GitHub
コミット
9d6cde9b1b
この署名に対応する既知のキーがデータベースに存在しません GPGキーID: 4AEE18F83AFDEB23
1個のファイルの変更17行の追加3行の削除
  1. +17
    -3
      lark/tree.py

+ 17
- 3
lark/tree.py ファイルの表示

@@ -104,7 +104,12 @@ class Transformer(object):
return getattr(self, name) return getattr(self, name)


def transform(self, tree): def transform(self, tree):
items = [self.transform(c) if isinstance(c, Tree) else c for c in tree.children]
items = []
for c in tree.children:
try:
items.append(self.transform(c) if isinstance(c, Tree) else c)
except Discard:
pass
try: try:
f = self._get_func(tree.data) f = self._get_func(tree.data)
except AttributeError: except AttributeError:
@@ -119,6 +124,9 @@ class Transformer(object):
return TransformerChain(self, other) return TransformerChain(self, other)




class Discard(Exception):
pass

class TransformerChain(object): class TransformerChain(object):
def __init__(self, *transformers): def __init__(self, *transformers):
self.transformers = transformers self.transformers = transformers
@@ -174,8 +182,14 @@ class Transformer_NoRecurse(Transformer):
else: else:
return f(t) return f(t)


for subtree in (subtrees):
subtree.children = [_t(c) if isinstance(c, Tree) else c for c in subtree.children]
for subtree in subtrees:
children = []
for c in subtree.children:
try:
children.append(_t(c) if isinstance(c, Tree) else c)
except Discard:
pass
subtree.children = children


return _t(tree) return _t(tree)




読み込み中…
キャンセル
保存