From 1409400cc879add807f28efa0c4a6f52591ac1a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juhani=20Krekel=C3=A4?= Date: Sun, 2 Jun 2019 21:36:12 +0300 Subject: [PATCH] Fix numerous small bugs in parse_regex.py --- parse_regex.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/parse_regex.py b/parse_regex.py index 2957c25..c0b0b9e 100644 --- a/parse_regex.py +++ b/parse_regex.py @@ -20,10 +20,17 @@ class ParseError(Exception): name = 'ParseError' else: name = __name__ + '.ParseError' - return '%s(%s, %i)' % (name, self.text, self.position) + + if self.position is not None: + return '%s(%s, %i)' % (name, self.text, self.position) + else: + return '%s(%s, None)' % (name, self.text) def __str__(self): - return '%i: %s' % (self.position, self.text) + if self.position is not None: + return '%i: %s' % (self.position, self.text) + else: + return self.text def tokenize(text): tokens = [Token(token_types.start, 0, None)] @@ -193,7 +200,7 @@ def parse(text): # Figure out what's gone wrong parens_stack = [] for i in working_stack: - if startp(i) or endp(i) or regexp(i): + if startp(i) or endp(i) or regexp(i) or barp(i): continue elif lparenp(i): @@ -209,16 +216,17 @@ def parse(text): raise ParseError('Missing the thing to repeat before a *', i.position) elif type(i) == Token: - raise ParseError('(Should be impossible!) Unprocessed token of type %s' % i.type.name) + raise ParseError('(Should be impossible!) Unprocessed token of type %s' % i.type.name, i.position) else: - raise ParseError('(Should be impossible!) Unprocessed junk in parsing stack: %s' % (i,)) + raise ParseError('(Should be impossible!) Unprocessed junk in parsing stack: %s' % (i,), i.position) if len(parens_stack) > 0: raise ParseError('Unpaired left parenthesis', parens_stack[0].position) # Wasn't anything we could figure out - raise ParseError('(Should be impossible!) Error figuring out the type of parse error') + print(working_stack)#debg + raise ParseError('(Should be impossible!) Error figuring out the type of parse error', None) def main(): try: