class NebPanic(BaseException): pass class InterpretPanic(NebPanic): def __init__(self, sym, msg, arg=None): if hasattr(sym, "line"): big_message = f"[{sym.line}] '{sym.name}': {msg}" else: big_message = f"[??] '{sym.name}': {msg}" if arg is not None: big_message += f" (got {arg})" super().__init__(big_message) class LexError(NebPanic): def __init__(self, message, line): super().__init__(f"line {line}: {message}") class ParseError(NebPanic): def __init__(self, message, line): super().__init__(f"line {line}: {message}")