@@ -413,6 +413,9 @@ class Lark(Serialize): | |||||
try: | try: | ||||
return e.puppet.resume_parse() | return e.puppet.resume_parse() | ||||
except UnexpectedToken as e2: | except UnexpectedToken as e2: | ||||
if e.token.type == e2.token.type == '$END' and e.puppet == e2.puppet: | |||||
# Prevent infinite loop | |||||
raise e2 | |||||
e = e2 | e = e2 | ||||
@@ -68,6 +68,17 @@ class ParserPuppet(object): | |||||
self._set_state, | self._set_state, | ||||
) | ) | ||||
def __eq__(self, other): | |||||
if not isinstance(other, ParserPuppet): | |||||
return False | |||||
return ( | |||||
self._state_stack == other._state_stack and | |||||
self._value_stack == other._value_stack and | |||||
self._stream == other._stream and | |||||
self._start == other._start | |||||
) | |||||
def pretty(self): | def pretty(self): | ||||
out = ["Puppet choices:"] | out = ["Puppet choices:"] | ||||
for k, v in self.choices().items(): | for k, v in self.choices().items(): | ||||