Skip to content

Commit 7c365de

Browse files
committed
Added custom input test (based on code from examples)
1 parent 19bbbee commit 7c365de

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

tests/test_parser.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,36 @@ def test_lexer_token_limit(self):
379379

380380
p = Lark(g, parser='lalr')
381381

382+
def test_custom_input(self):
383+
class TypeLexer(Lexer):
384+
def __init__(self, lexer_conf):
385+
pass
386+
387+
def lex(self, data):
388+
for obj in data:
389+
t = type(obj).__name__.upper()
390+
yield Token(t, obj)
391+
392+
parser = Lark("""
393+
start: data_item+
394+
data_item: STR INT*
395+
396+
%declare STR INT
397+
""", parser='lalr', lexer=TypeLexer)
398+
399+
400+
class ParseToDict(Transformer):
401+
@v_args(inline=True)
402+
def data_item(self, name, *numbers):
403+
return name.value, [n.value for n in numbers]
404+
405+
start = dict
406+
407+
data = ['alice', 1, 27, 3, 'bob', 4, 'carrie', 'dan', 8, 6]
408+
tree = parser.parse(data)
409+
res = ParseToDict().transform(tree)
410+
assert res == {'alice': [1, 27, 3], 'bob': [4], 'carrie': [], 'dan': [8, 6]}
411+
382412

383413

384414
def _make_full_earley_test(LEXER):

0 commit comments

Comments
 (0)