Browse Source

visitor_args -> v_args

tags/gm/2021-09-23T00Z/github.com--lark-parser-lark/0.6.0
Erez Shinan 7 years ago
parent
commit
6d76a4ce8d
7 changed files with 21 additions and 20 deletions
  1. +2
    -2
      examples/calc.py
  2. +3
    -3
      examples/json_parser.py
  3. +1
    -1
      lark/__init__.py
  4. +7
    -6
      lark/load_grammar.py
  5. +2
    -2
      lark/parsers/earley.py
  6. +1
    -1
      lark/visitors.py
  7. +5
    -5
      tests/test_trees.py

+ 2
- 2
examples/calc.py View File

@@ -2,7 +2,7 @@
# This example shows how to write a basic calculator with variables.
#

from lark import Lark, Transformer, visitor_args
from lark import Lark, Transformer, v_args

try:
input = raw_input # For Python2 compatibility
@@ -34,7 +34,7 @@ calc_grammar = """
%ignore WS_INLINE
"""

@visitor_args(inline=True)
@v_args(inline=True)
class CalculateTree(Transformer):
from operator import add, sub, mul, truediv as div, neg
number = float


+ 3
- 3
examples/json_parser.py View File

@@ -7,7 +7,7 @@

import sys

from lark import Lark, Transformer, visitor_args
from lark import Lark, Transformer, v_args

json_grammar = r"""
?start: value
@@ -34,14 +34,14 @@ json_grammar = r"""
"""

class TreeToJson(Transformer):
@visitor_args(inline=True)
@v_args(inline=True)
def string(self, s):
return s[1:-1].replace('\\"', '"')

array = list
pair = tuple
object = dict
number = visitor_args(inline=True)(float)
number = v_args(inline=True)(float)

null = lambda self, _: None
true = lambda self, _: True


+ 1
- 1
lark/__init__.py View File

@@ -1,5 +1,5 @@
from .tree import Tree
from .visitors import Transformer, Visitor, visitor_args, Discard
from .visitors import Transformer, Visitor, v_args, Discard
from .visitors import InlineTransformer, inline_args # XXX Deprecated
from .common import ParseError, GrammarError, UnexpectedToken
from .lexer import UnexpectedInput, LexError


+ 7
- 6
lark/load_grammar.py View File

@@ -16,7 +16,8 @@ from .grammar import RuleOptions, Rule, Terminal, NonTerminal, Symbol
from .utils import classify, suppress

from .tree import Tree, SlottedTree as ST
from .visitors import Transformer, Visitor, visitor_args
from .visitors import Transformer, Visitor, v_args
inline_args = v_args(inline=True)

__path__ = os.path.dirname(__file__)
IMPORT_PATHS = [os.path.join(__path__, 'grammars')]
@@ -138,7 +139,7 @@ RULES = {
}


@visitor_args(inline=True)
@inline_args
class EBNF_to_BNF(Transformer):
def __init__(self):
self.new_rules = []
@@ -243,7 +244,7 @@ class RuleTreeToText(Transformer):
return expansion, alias.value


@visitor_args(inline=True)
@inline_args
class CanonizeTree(Transformer):
def maybe(self, expr):
return ST('expr', [expr, Token('OP', '?', -1)])
@@ -264,7 +265,7 @@ class PrepareAnonTerminals(Transformer):
self.i = 0


@visitor_args(inline=True)
@inline_args
def pattern(self, p):
value = p.value
if p in self.token_reverse and p.flags != self.token_reverse[p].pattern.flags:
@@ -354,7 +355,7 @@ def _literal_to_pattern(literal):
'REGEXP': PatternRE }[literal.type](s, flags)


@visitor_args(inline=True)
@inline_args
class PrepareLiterals(Transformer):
def literal(self, literal):
return ST('pattern', [_literal_to_pattern(literal)])
@@ -532,7 +533,7 @@ def options_from_rule(name, *x):
def symbols_from_strcase(expansion):
return [Terminal(x, filter_out=x.startswith('_')) if is_terminal(x) else NonTerminal(x) for x in expansion]

@visitor_args(inline=True)
@inline_args
class PrepareGrammar(Transformer):
def terminal(self, name):
return name


+ 2
- 2
lark/parsers/earley.py View File

@@ -14,7 +14,7 @@
# Email : erezshin@gmail.com

from ..tree import Tree
from ..visitors import Transformer_InPlace, visitor_args
from ..visitors import Transformer_InPlace, v_args
from ..common import ParseError, UnexpectedToken
from .grammar_analysis import GrammarAnalyzer
from ..grammar import NonTerminal
@@ -234,6 +234,6 @@ class ApplyCallbacks(Transformer_InPlace):
def __init__(self, postprocess):
self.postprocess = postprocess

@visitor_args(meta=True)
@v_args(meta=True)
def drv(self, children, meta):
return self.postprocess[meta.rule](children)

+ 1
- 1
lark/visitors.py View File

@@ -206,7 +206,7 @@ def _visitor_args_func_dec(func, inline=False, meta=False):
f.meta = meta
return f

def visitor_args(inline=False, meta=False):
def v_args(inline=False, meta=False):
if inline and meta:
raise ValueError("Visitor functions can either accept meta, or be inlined. Not both.")
def _visitor_args_dec(obj):


+ 5
- 5
tests/test_trees.py View File

@@ -6,7 +6,7 @@ import copy
import pickle

from lark.tree import Tree
from lark.visitors import Transformer, Interpreter, visit_children_decor, visitor_args
from lark.visitors import Transformer, Interpreter, visit_children_decor, v_args


class TestTrees(TestCase):
@@ -63,8 +63,8 @@ class TestTrees(TestCase):
t = Tree('add', [Tree('sub', [Tree('i', ['3']), Tree('f', ['1.1'])]), Tree('i', ['1'])])

class T(Transformer):
i = visitor_args(inline=True)(int)
f = visitor_args(inline=True)(float)
i = v_args(inline=True)(int)
f = v_args(inline=True)(float)

sub = lambda self, values: values[0] - values[1]

@@ -74,7 +74,7 @@ class TestTrees(TestCase):
res = T().transform(t)
self.assertEqual(res, 2.9)

@visitor_args(inline=True)
@v_args(inline=True)
class T(Transformer):
i = int
f = float
@@ -88,7 +88,7 @@ class TestTrees(TestCase):
self.assertEqual(res, 2.9)


@visitor_args(inline=True)
@v_args(inline=True)
class T(Transformer):
i = int
f = float


Loading…
Cancel
Save