| @@ -1558,6 +1558,27 @@ def _make_parser_test(LEXER, PARSER): | |||||
| self.assertEqual(parser.parse('xa', 'a'), Tree('a', [])) | self.assertEqual(parser.parse('xa', 'a'), Tree('a', [])) | ||||
| self.assertEqual(parser.parse('xb', 'b'), Tree('b', [])) | self.assertEqual(parser.parse('xb', 'b'), Tree('b', [])) | ||||
| def test_lexer_detect_newline_tokens(self): | |||||
| # Detect newlines in regular tokens | |||||
| g = Lark(r"""start: "go" tail* | |||||
| tail : SA "a" | SB "b" | SC "c" | SD "d" | |||||
| SA : /\n/ | |||||
| SB : /./ | |||||
| SC : /[^a-z]/ | |||||
| SD : /\s/g | |||||
| """, parser=PARSER, lexer=LEXER) | |||||
| _, _, a, _, b, _, c, _, d = g.lex('go\na\nb\nc\nd') | |||||
| self.assertEqual(a.line, 2) | |||||
| self.assertEqual(b.line, 3) | |||||
| self.assertEqual(c.line, 4) | |||||
| self.assertEqual(d.line, 5) | |||||
| # Detect newlines in ignored tokens | |||||
| for re in ['/\\n/', '/[^a-z]/', '/\\s/']: | |||||
| g = Lark('start: "a" [start]\n%ignore {}'.format(re), lexer=LEXER, parser=PARSER) | |||||
| a, b = g.lex('a\na') | |||||
| self.assertEqual(a.line, 1) | |||||
| self.assertEqual(b.line, 2) | |||||
| _NAME = "Test" + PARSER.capitalize() + LEXER.capitalize() | _NAME = "Test" + PARSER.capitalize() + LEXER.capitalize() | ||||