@@ -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) | |||||