#!/usr/bin/env python3 import re import json import weakref import random from itertools import groupby from collections import namedtuple from collections import ChainMap from types import GeneratorType global_env = ChainMap() def throw(ex, token=None, sourcefile=None, lineno=None, column=None): raise type(ex)(f"{f'{sourcefile}:'.encode('unicode-escape').decode('utf-8') if (sourcefile := getattr(token, 'sourcefile', sourcefile)) else ''}{f'{lineno}:' if (lineno := getattr(token, 'lineno', lineno)) else ''}{f'{column}:' if (column := getattr(token, 'column', column)) else ''} {ex.args[0]}") if token or sourcefile or lineno or column else ex Token = namedtuple('Token', ('str', 'type', 'sourcefile', 'lineno', 'column')) Token.default = Token('', '', '