changeset 0e78ffeebffd in /z/repo/m5 details: http://repo.m5sim.org/m5?cmd=changeset;node=0e78ffeebffd description: slicc: better error messages when the python parser fails
diffstat: 1 file changed, 11 insertions(+), 4 deletions(-) src/mem/slicc/parser/parser.py | 15 +++++++++++---- diffs (39 lines): diff -r 606cf4e1ade6 -r 0e78ffeebffd src/mem/slicc/parser/parser.py --- a/src/mem/slicc/parser/parser.py Mon Aug 03 11:06:19 2009 -0700 +++ b/src/mem/slicc/parser/parser.py Tue Aug 04 09:37:27 2009 -0700 @@ -100,8 +100,15 @@ t_ASSIGN = r':=' t_DOT = r'\.' -class TokenError(Exception): pass -class ParseError(Exception): pass +class TokenError(Exception): + def __init__(self, msg, t): + super(TokenError, self).__init__(msg) + self.token = t + +class ParseError(Exception): + def __init__(self, msg, t): + super(ParseError, self).__init__(msg) + self.token = t def t_error(t): raise TokenError("Illegal character", t) @@ -157,7 +164,7 @@ p[0] = [ x for x in p[1] if x is not None ] def p_error(t): - raise ParseError(t) + raise ParseError("Syntax error", t) def p_empty(p): "empty :" @@ -544,7 +551,7 @@ try: results = yacc.parse(file(filename, 'r').read()) except (TokenError, ParseError), e: - raise type(e), tuple([filename] + [ i for i in e ]) + sys.exit("%s: %s:%d" % (e, filename, e.token.lineno)) for result in results: result.add(hh, cc) _______________________________________________ m5-dev mailing list m5-dev@m5sim.org http://m5sim.org/mailman/listinfo/m5-dev