diff --git a/lark/lexer.py b/lark/lexer.py index 19e1be4..51ccf6c 100644 --- a/lark/lexer.py +++ b/lark/lexer.py @@ -63,7 +63,7 @@ class LineCounter: self.newline_char = '\n' self.char_pos = 0 self.line = 1 - self.column = 0 + self.column = 1 self.line_start_pos = 0 def feed(self, token, test_newline=True): @@ -78,7 +78,7 @@ class LineCounter: self.line_start_pos = self.char_pos + token.rindex(self.newline_char) + 1 self.char_pos += len(token) - self.column = self.char_pos - self.line_start_pos + self.column = self.char_pos - self.line_start_pos + 1 class _Lex: "Built to serve both Lexer and ContextualLexer" diff --git a/lark/parsers/xearley.py b/lark/parsers/xearley.py index c64bfee..5e8fb28 100644 --- a/lark/parsers/xearley.py +++ b/lark/parsers/xearley.py @@ -53,7 +53,7 @@ class Parser: match = self.term_matcher text_line = 1 - text_column = 0 + text_column = 1 def predict(nonterm, column): assert not nonterm.is_term, nonterm @@ -128,7 +128,7 @@ class Parser: if token == '\n': text_line += 1 - text_column = 0 + text_column = 1 else: text_column += 1 diff --git a/tests/test_parser.py b/tests/test_parser.py index 21a3dc6..6823f0c 100644 --- a/tests/test_parser.py +++ b/tests/test_parser.py @@ -854,22 +854,22 @@ def _make_parser_test(LEXER, PARSER): l = _Lark(g) a, bc, d = l.parse("AB\nCD").children self.assertEqual(a.line, 1) - self.assertEqual(a.column, 0) + self.assertEqual(a.column, 1) bc ,= bc.children self.assertEqual(bc.line, 1) - self.assertEqual(bc.column, 1) + self.assertEqual(bc.column, 2) self.assertEqual(d.line, 2) - self.assertEqual(d.column, 1) + self.assertEqual(d.column, 2) if LEXER != 'dynamic': self.assertEqual(a.end_line, 1) - self.assertEqual(a.end_column, 1) + self.assertEqual(a.end_column, 2) self.assertEqual(bc.end_line, 2) - self.assertEqual(bc.end_column, 1) + self.assertEqual(bc.end_column, 2) self.assertEqual(d.end_line, 2) - self.assertEqual(d.end_column, 2) + self.assertEqual(d.end_column, 3)