Browse Source

Added debug prints for parser error (in debug mode)

tags/gm/2021-09-23T00Z/github.com--lark-parser-lark/0.8.6
Erez Sh 4 years ago
parent
commit
c56112eea3
1 changed files with 26 additions and 14 deletions
  1. +26
    -14
      lark/parsers/lalr_parser.py

+ 26
- 14
lark/parsers/lalr_parser.py View File

@@ -19,7 +19,7 @@ class LALR_Parser(object):

self._parse_table = analysis.parse_table
self.parser_conf = parser_conf
self.parser = _Parser(analysis.parse_table, callbacks)
self.parser = _Parser(analysis.parse_table, callbacks, debug)

@classmethod
def deserialize(cls, data, memo, callbacks):
@@ -36,11 +36,12 @@ class LALR_Parser(object):


class _Parser:
def __init__(self, parse_table, callbacks):
def __init__(self, parse_table, callbacks, debug=False):
self.states = parse_table.states
self.start_states = parse_table.start_states
self.end_states = parse_table.end_states
self.callbacks = callbacks
self.debug = debug

def parse(self, seq, start, set_state=None):
token = None
@@ -80,18 +81,29 @@ class _Parser:
value_stack.append(value)

# Main LALR-parser loop
for token in stream:
while True:
action, arg = get_action(token)
assert arg != end_state

if action is Shift:
state_stack.append(arg)
value_stack.append(token)
if set_state: set_state(arg)
break # next token
else:
reduce(arg)
try:
for token in stream:
while True:
action, arg = get_action(token)
assert arg != end_state

if action is Shift:
state_stack.append(arg)
value_stack.append(token)
if set_state: set_state(arg)
break # next token
else:
reduce(arg)
except Exception as e:
if self.debug:
print("")
print("STATE STACK DUMP")
print("----------------")
for i, s in enumerate(state_stack):
print('%d)' % i , s)
print("")

raise

token = Token.new_borrow_pos('$END', '', token) if token else Token('$END', '', 0, 1, 1)
while True:


Loading…
Cancel
Save