Browse Source

Merge pull request #597 from aleh-arol/enhancement/match_examples_to_favor_token_type

tags/gm/2021-09-23T00Z/github.com--lark-parser-lark/0.9.0
Erez Shinan 4 years ago
committed by GitHub
parent
commit
bd02a5a2f1
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 11 additions and 5 deletions
  1. +11
    -5
      lark/exceptions.py

+ 11
- 5
lark/exceptions.py View File

@@ -32,14 +32,14 @@ class UnexpectedInput(LarkError):
after = text[pos:end].split('\n', 1)[0]
return before + after + '\n' + ' ' * len(before) + '^\n'

def match_examples(self, parse_fn, examples):
def match_examples(self, parse_fn, examples, token_type_match_fallback=False):
""" Given a parser instance and a dictionary mapping some label with
some malformed syntax examples, it'll return the label for the
example that bests matches the current error.
"""
assert self.state is not None, "Not supported for this exception"

candidate = None
candidate = (None, False)
for label, example in examples.items():
assert not isinstance(example, STRING_TYPE)

@@ -51,12 +51,18 @@ class UnexpectedInput(LarkError):
try:
if ut.token == self.token: # Try exact match first
return label

if token_type_match_fallback:
# Fallback to token types match
if (ut.token.type == self.token.type) and not candidate[-1]:
candidate = label, True

except AttributeError:
pass
if not candidate:
candidate = label
if not candidate[0]:
candidate = label, False

return candidate
return candidate[0]


class UnexpectedCharacters(LexError, UnexpectedInput):


Loading…
Cancel
Save