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