�
K�gA# � � � d dl Z d dlmZ d dlmZmZmZmZmZm Z m
Z
mZ er1ddlm
Z
mZ d dlZn# e$ r Y nw xY we j dk rd dlmZ nd dlmZ d dlmZ G d � d
� � Z e
d� � Zeedf Z G d
� de e � � Zed Z G d� de� � Zddededdddfd�Zddefd�Zddefd�ZdS )� N)�deepcopy)�List�Callable�Iterator�Union�Optional�Generic�TypeVar�
TYPE_CHECKING� )�TerminalDef�Token)� � )�Literal)�OrderedDictc �p � e Zd ZU eed<