o
     JAfª%  ã                   @   s0   	 d dl Z d dlmZmZ G dd„ dejƒZdS )é    N)ÚgrammarÚtokenc                   @   s.   e Zd Z	 dd„ Zdd„ Zdd„ Zdd„ Zd	S )
Ú	Converterc                 C   s"   	 |   |¡ |  |¡ |  ¡  d S ©N)Úparse_graminit_hÚparse_graminit_cÚ
finish_off)ÚselfZ
graminit_hZ
graminit_c© r
   ú)/usr/lib/python3.10/lib2to3/pgen2/conv.pyÚrun/   s   

zConverter.runc           	   
   C   sÄ   	 zt |ƒ}W n ty" } ztd||f ƒ W Y d }~dS d }~ww i | _i | _d}|D ]2}|d7 }t d|¡}|sK| ¡ rKtd||| ¡ f ƒ q-| ¡ \}}t	|ƒ}|| j|< || j|< q-dS )NúCan't open %s: %sFr   é   z^#define\s+(\w+)\s+(\d+)$z%s(%s): can't parse %sT)
ÚopenÚOSErrorÚprintZsymbol2numberZnumber2symbolÚreÚmatchÚstripÚgroupsÚint)	r	   ÚfilenameÚfÚerrÚlinenoÚlineÚmoÚsymbolÚnumberr
   r
   r   r   5   s.   €þ
ÿ
zConverter.parse_graminit_hc           !   
   C   sÌ  	 zt |ƒ}W n ty" } ztd||f ƒ W Y d }~dS d }~ww d}|d t|ƒ}}|d t|ƒ}}|d t|ƒ}}i }g }| d¡r| d¡r¨t d|¡}ttt	| 
¡ ƒƒ\}	}
}g }t|ƒD ]#}|d t|ƒ}}t d|¡}ttt	| 
¡ ƒƒ\}}| ||f¡ qg|d t|ƒ}}|||	|
f< |d t|ƒ}}| d¡sOt d|¡}ttt	| 
¡ ƒƒ\}}g }t|ƒD ](}|d t|ƒ}}t d	|¡}ttt	| 
¡ ƒƒ\}}	}
||	|
f }| |¡ q¿| |¡ |d t|ƒ}}|d t|ƒ}}| d¡sJ|| _i }t d
|¡}t	| d¡ƒ}t|ƒD ]o}|d t|ƒ}}t d|¡}| d¡}ttt	| dddd¡ƒƒ\}}}}|| }|d t|ƒ}}t d|¡}i }t| d¡ƒ}t|ƒD ] \}}t|ƒ}tdƒD ]}|d|> @ r~d||d | < qmqa||f||< q|d t|ƒ}}|| _g }|d t|ƒ}}t d|¡}t	| d¡ƒ}t|ƒD ]/}|d t|ƒ}}t d|¡}| 
¡ \}}t	|ƒ}|dkrÕd }nt|ƒ}| ||f¡ q²|d t|ƒ}}|| _|d t|ƒ}}|d t|ƒ}}t d|¡}t	| d¡ƒ}|d t|ƒ}}|d t|ƒ}}t d|¡}t	| d¡ƒ}|d t|ƒ}}t d|¡}t	| d¡ƒ} | | _|d t|ƒ}}z|d t|ƒ}}W d S  tye   Y d S w )Nr   Fr   r   zstatic arc z)static arc arcs_(\d+)_(\d+)\[(\d+)\] = {$z\s+{(\d+), (\d+)},$z'static state states_(\d+)\[(\d+)\] = {$z\s+{(\d+), arcs_(\d+)_(\d+)},$zstatic dfa dfas\[(\d+)\] = {$z0\s+{(\d+), "(\w+)", (\d+), (\d+), states_(\d+),$é   é   é   é   z\s+("(?:\\\d\d\d)*")},$é   z!static label labels\[(\d+)\] = {$z\s+{(\d+), (0|"\w+")},$Ú0z
\s+(\d+),$z\s+{(\d+), labels},$z	\s+(\d+)$)r   r   r   ÚnextÚ
startswithr   r   ÚlistÚmapr   r   ÚrangeÚappendÚstatesÚgroupÚevalÚ	enumerateÚordÚdfasÚlabelsÚstartÚStopIteration)!r	   r   r   r   r   r   Zallarcsr+   r   ÚnÚmÚkZarcsÚ_ÚiÚjÚsÚtÚstater0   Zndfasr   r   ÚxÚyÚzÚfirstZ	rawbitsetÚcZbyter1   Znlabelsr2   r
   r
   r   r   T   sÌ   €þ
ÿ
ñ

ß"ÿ
"€þ
ÿzConverter.parse_graminit_cc                 C   sZ   	 i | _ i | _t| jƒD ]\}\}}|tjkr!|d ur!|| j |< q|d u r*|| j|< qd S r   )ÚkeywordsÚtokensr.   r1   r   ÚNAME)r	   ZilabelÚtypeÚvaluer
   r
   r   r   ù   s   
€üzConverter.finish_offN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r
   r
   r
   r   r   $   s    
 &r   )r   Zpgen2r   r   ZGrammarr   r
   r
   r
   r   Ú<module>   s   