From 475312c6088afdecd3c24c49dc1ac16958de05ff Mon Sep 17 00:00:00 2001 From: Erez Shinan Date: Sun, 24 Mar 2019 12:18:23 +0200 Subject: [PATCH] Bugfix in tools.nearley: Added support for null keyword (Issue #342) --- lark/tools/nearley.py | 6 +++++- tests/test_nearley/test_nearley.py | 9 +++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/lark/tools/nearley.py b/lark/tools/nearley.py index 43d5825..8412259 100644 --- a/lark/tools/nearley.py +++ b/lark/tools/nearley.py @@ -20,12 +20,13 @@ nearley_grammar = r""" ?expr: item [":" /[+*?]/] - ?item: rule|string|regexp + ?item: rule|string|regexp|null | "(" expansions ")" rule: NAME string: STRING regexp: REGEXP + null: "null" JS: /{%.*?%}/s js: JS? @@ -83,6 +84,9 @@ class NearleyToLark(InlineTransformer): def regexp(self, r): return '/%s/' % r + def null(self): + return '' + def string(self, s): return self._extra_rule(s) diff --git a/tests/test_nearley/test_nearley.py b/tests/test_nearley/test_nearley.py index 10c9c40..721db1d 100644 --- a/tests/test_nearley/test_nearley.py +++ b/tests/test_nearley/test_nearley.py @@ -83,6 +83,15 @@ class TestNearley(unittest.TestCase): parse = d['parse'] parse(u'"') + def test_null(self): + grammar = r'main -> "a" | null' + code = create_code_for_nearley_grammar(grammar, 'main', BUILTIN_PATH, './') + d = {} + exec (code, d) + parse = d['parse'] + parse('a') + parse('') + def test_utf8_2(self): fn = os.path.join(TEST_PATH, 'grammars/unicode.ne') nearley_tool_main(fn, 'x', NEARLEY_PATH)