| @@ -30,6 +30,7 @@ try: | |||||
| except ImportError: | except ImportError: | ||||
| regex = None | regex = None | ||||
| import lark | |||||
| from lark import logger | from lark import logger | ||||
| from lark.lark import Lark | from lark.lark import Lark | ||||
| from lark.exceptions import GrammarError, ParseError, UnexpectedToken, UnexpectedInput, UnexpectedCharacters | from lark.exceptions import GrammarError, ParseError, UnexpectedToken, UnexpectedInput, UnexpectedCharacters | ||||
| @@ -942,10 +943,24 @@ class DualBytesLark: | |||||
| def _make_parser_test(LEXER, PARSER): | def _make_parser_test(LEXER, PARSER): | ||||
| lexer_class_or_name = CustomLexer if LEXER == 'custom' else LEXER | lexer_class_or_name = CustomLexer if LEXER == 'custom' else LEXER | ||||
| def _Lark(grammar, **kwargs): | |||||
| return Lark(grammar, lexer=lexer_class_or_name, parser=PARSER, propagate_positions=True, **kwargs) | |||||
| def _Lark_open(gfilename, **kwargs): | |||||
| return Lark.open(gfilename, lexer=lexer_class_or_name, parser=PARSER, propagate_positions=True, **kwargs) | |||||
| if (LEXER, PARSER) == ('standard', 'earley'): | |||||
| # Check that the `lark.lark` grammar represents can parse every example used in these tests. | |||||
| # Doesn't matter when we do it, or how often. Just do it for the first entry in `TO_TEST` | |||||
| lalr_parser = Lark.open(os.path.join(os.path.dirname(lark.__file__), 'grammars/lark.lark'), parser='lalr') | |||||
| def _Lark(grammar, **kwargs): | |||||
| inst = Lark(grammar, lexer=lexer_class_or_name, parser=PARSER, propagate_positions=True, **kwargs) | |||||
| lalr_parser.parse(inst.source_grammar) # Test after instance creation. When the grammar should fail, don't test it. | |||||
| return inst | |||||
| def _Lark_open(gfilename, **kwargs): | |||||
| inst = Lark.open(gfilename, lexer=lexer_class_or_name, parser=PARSER, propagate_positions=True, **kwargs) | |||||
| lalr_parser.parse(inst.source_grammar) | |||||
| return inst | |||||
| else: | |||||
| def _Lark(grammar, **kwargs): | |||||
| return Lark(grammar, lexer=lexer_class_or_name, parser=PARSER, propagate_positions=True, **kwargs) | |||||
| def _Lark_open(gfilename, **kwargs): | |||||
| return Lark.open(gfilename, lexer=lexer_class_or_name, parser=PARSER, propagate_positions=True, **kwargs) | |||||
| class _TestParser(unittest.TestCase): | class _TestParser(unittest.TestCase): | ||||
| def test_basic1(self): | def test_basic1(self): | ||||