| @@ -63,7 +63,7 @@ class LineCounter: | |||||
| self.newline_char = '\n' | self.newline_char = '\n' | ||||
| self.char_pos = 0 | self.char_pos = 0 | ||||
| self.line = 1 | self.line = 1 | ||||
| self.column = 0 | |||||
| self.column = 1 | |||||
| self.line_start_pos = 0 | self.line_start_pos = 0 | ||||
| def feed(self, token, test_newline=True): | 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.line_start_pos = self.char_pos + token.rindex(self.newline_char) + 1 | ||||
| self.char_pos += len(token) | 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: | class _Lex: | ||||
| "Built to serve both Lexer and ContextualLexer" | "Built to serve both Lexer and ContextualLexer" | ||||
| @@ -53,7 +53,7 @@ class Parser: | |||||
| match = self.term_matcher | match = self.term_matcher | ||||
| text_line = 1 | text_line = 1 | ||||
| text_column = 0 | |||||
| text_column = 1 | |||||
| def predict(nonterm, column): | def predict(nonterm, column): | ||||
| assert not nonterm.is_term, nonterm | assert not nonterm.is_term, nonterm | ||||
| @@ -128,7 +128,7 @@ class Parser: | |||||
| if token == '\n': | if token == '\n': | ||||
| text_line += 1 | text_line += 1 | ||||
| text_column = 0 | |||||
| text_column = 1 | |||||
| else: | else: | ||||
| text_column += 1 | text_column += 1 | ||||
| @@ -854,22 +854,22 @@ def _make_parser_test(LEXER, PARSER): | |||||
| l = _Lark(g) | l = _Lark(g) | ||||
| a, bc, d = l.parse("AB\nCD").children | a, bc, d = l.parse("AB\nCD").children | ||||
| self.assertEqual(a.line, 1) | self.assertEqual(a.line, 1) | ||||
| self.assertEqual(a.column, 0) | |||||
| self.assertEqual(a.column, 1) | |||||
| bc ,= bc.children | bc ,= bc.children | ||||
| self.assertEqual(bc.line, 1) | self.assertEqual(bc.line, 1) | ||||
| self.assertEqual(bc.column, 1) | |||||
| self.assertEqual(bc.column, 2) | |||||
| self.assertEqual(d.line, 2) | self.assertEqual(d.line, 2) | ||||
| self.assertEqual(d.column, 1) | |||||
| self.assertEqual(d.column, 2) | |||||
| if LEXER != 'dynamic': | if LEXER != 'dynamic': | ||||
| self.assertEqual(a.end_line, 1) | 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_line, 2) | ||||
| self.assertEqual(bc.end_column, 1) | |||||
| self.assertEqual(bc.end_column, 2) | |||||
| self.assertEqual(d.end_line, 2) | self.assertEqual(d.end_line, 2) | ||||
| self.assertEqual(d.end_column, 2) | |||||
| self.assertEqual(d.end_column, 3) | |||||