diff --git a/lark/load_grammar.py b/lark/load_grammar.py index c8d834e..5e412ec 100644 --- a/lark/load_grammar.py +++ b/lark/load_grammar.py @@ -139,7 +139,7 @@ RULES = { 'declare': ['_DECLARE _declare_args _NL'], 'import': ['_IMPORT _import_path _NL', '_IMPORT _import_path _LPAR name_list _RPAR _NL', - '_IMPORT _import_path _TO TERMINAL _NL'], + '_IMPORT _import_path _TO name _NL'], '_import_path': ['import_lib', 'import_rel'], 'import_lib': ['_import_args'], diff --git a/tests/test_parser.py b/tests/test_parser.py index 397efc6..8e1a234 100644 --- a/tests/test_parser.py +++ b/tests/test_parser.py @@ -1056,6 +1056,31 @@ def _make_parser_test(LEXER, PARSER): 'y']) + def test_relative_rule_import_subrule_no_conflict(self): + l = _Lark_open( + 'test_relative_rule_import_subrule_no_conflict.lark', + rel_to=__file__) + x = l.parse('xaby') + self.assertEqual(x.children, [Tree('expr', [ + 'x', + Tree('startab', [ + Tree('grammars__ab__expr', ['a', 'b']), + ]), + 'y'])]) + self.assertRaises((ParseError, UnexpectedInput), + l.parse, 'xaxabyby') + + + def test_relative_rule_import_rename(self): + l = _Lark_open('test_relative_rule_import_rename.lark', + rel_to=__file__) + x = l.parse('xaabby') + self.assertEqual(x.children, [ + 'x', + Tree('ab', ['a', Tree('ab', ['a', 'b']), 'b']), + 'y']) + + def test_multi_import(self): grammar = """ start: NUMBER WORD diff --git a/tests/test_relative_rule_import_rename.lark b/tests/test_relative_rule_import_rename.lark new file mode 100644 index 0000000..342b329 --- /dev/null +++ b/tests/test_relative_rule_import_rename.lark @@ -0,0 +1,7 @@ +start: X ab Y + +X: "x" +Y: "y" + +%import .grammars.ab.expr -> ab + diff --git a/tests/test_relative_rule_import_subrule_no_conflict.lark b/tests/test_relative_rule_import_subrule_no_conflict.lark new file mode 100644 index 0000000..839aac1 --- /dev/null +++ b/tests/test_relative_rule_import_subrule_no_conflict.lark @@ -0,0 +1,9 @@ +start: expr + +expr: X startab Y + +X: "x" +Y: "y" + +%import .grammars.ab.startab +