Pārlūkot izejas kodu

More minor refactorings

tags/gm/2021-09-23T00Z/github.com--lark-parser-lark/0.12.0
Erez Sh pirms 3 gadiem
vecāks
revīzija
24f653080f
3 mainītis faili ar 17 papildinājumiem un 14 dzēšanām
  1. +9
    -6
      lark/exceptions.py
  2. +6
    -6
      lark/lark.py
  3. +2
    -2
      lark/parsers/lalr_parser.py

+ 9
- 6
lark/exceptions.py Parādīt failu

@@ -129,6 +129,8 @@ class UnexpectedInput(LarkError):

class UnexpectedEOF(ParseError, UnexpectedInput):
def __init__(self, expected, state=None, terminals_by_name=None):
super(UnexpectedEOF, self).__init__()

self.expected = expected
self.state = state
from .lexer import Token
@@ -138,7 +140,6 @@ class UnexpectedEOF(ParseError, UnexpectedInput):
self.column = -1
self._terminals_by_name = terminals_by_name

super(UnexpectedEOF, self).__init__()

def __str__(self):
message = "Unexpected end-of-input. "
@@ -149,6 +150,8 @@ class UnexpectedEOF(ParseError, UnexpectedInput):
class UnexpectedCharacters(LexError, UnexpectedInput):
def __init__(self, seq, lex_pos, line, column, allowed=None, considered_tokens=None, state=None, token_history=None,
terminals_by_name=None, considered_rules=None):
super(UnexpectedCharacters, self).__init__()

# TODO considered_tokens and allowed can be figured out using state
self.line = line
self.column = column
@@ -167,7 +170,6 @@ class UnexpectedCharacters(LexError, UnexpectedInput):
self.char = seq[lex_pos]
self._context = self.get_context(seq)

super(UnexpectedCharacters, self).__init__()

def __str__(self):
message = "No terminal matches '%s' in the current parser context, at line %d col %d" % (self.char, self.line, self.column)
@@ -190,6 +192,8 @@ class UnexpectedToken(ParseError, UnexpectedInput):
"""

def __init__(self, token, expected, considered_rules=None, state=None, interactive_parser=None, terminals_by_name=None, token_history=None):
super(UnexpectedToken, self).__init__()
# TODO considered_rules and expected can be figured out using state
self.line = getattr(token, 'line', '?')
self.column = getattr(token, 'column', '?')
@@ -204,7 +208,6 @@ class UnexpectedToken(ParseError, UnexpectedInput):
self._terminals_by_name = terminals_by_name
self.token_history = token_history

super(UnexpectedToken, self).__init__()

@property
def accepts(self):
@@ -236,10 +239,10 @@ class VisitError(LarkError):
"""

def __init__(self, rule, obj, orig_exc):
self.obj = obj
self.orig_exc = orig_exc

message = 'Error trying to process rule "%s":\n\n%s' % (rule, orig_exc)
super(VisitError, self).__init__(message)

self.obj = obj
self.orig_exc = orig_exc

###}

+ 6
- 6
lark/lark.py Parādīt failu

@@ -451,11 +451,11 @@ class Lark(Serialize):
d = f
else:
d = pickle.load(f)
memo = d['memo']
memo_json = d['memo']
data = d['data']

assert memo
memo = SerializeMemoizer.deserialize(memo, {'Rule': Rule, 'TerminalDef': TerminalDef}, {})
assert memo_json
memo = SerializeMemoizer.deserialize(memo_json, {'Rule': Rule, 'TerminalDef': TerminalDef}, {})
options = dict(data['options'])
if (set(kwargs) - _LOAD_ALLOWED_OPTIONS) & set(LarkOptions._defaults):
raise ConfigurationError("Some options are not allowed when loading a Parser: {}"
@@ -512,11 +512,11 @@ class Lark(Serialize):

Lark.open_from_package(__name__, "example.lark", ("grammars",), parser=...)
"""
package = FromPackageLoader(package, search_paths)
full_path, text = package(None, grammar_path)
package_loader = FromPackageLoader(package, search_paths)
full_path, text = package_loader(None, grammar_path)
options.setdefault('source_path', full_path)
options.setdefault('import_paths', [])
options['import_paths'].append(package)
options['import_paths'].append(package_loader)
return cls(text, **options)

def __repr__(self):


+ 2
- 2
lark/parsers/lalr_parser.py Parādīt failu

@@ -178,8 +178,8 @@ class _Parser(object):
for token in state.lexer.lex(state):
state.feed_token(token)

token = Token.new_borrow_pos('$END', '', token) if token else Token('$END', '', 0, 1, 1)
return state.feed_token(token, True)
end_token = Token.new_borrow_pos('$END', '', token) if token else Token('$END', '', 0, 1, 1)
return state.feed_token(end_token, True)
except UnexpectedInput as e:
try:
e.interactive_parser = InteractiveParser(self, state, state.lexer)


Notiek ielāde…
Atcelt
Saglabāt