a
    åzeª%  ã                   @   s.   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.9/lib2to3/pgen2/conv.pyÚrun/   s    

zConverter.runc           	   
   C   sÂ   zt |ƒ}W n6 tyB } ztd||f ƒ W Y d }~dS d }~0 0 i | _i | _d}|D ]d}|d7 }t d|¡}|s”| ¡ r”td||| ¡ f ƒ qX| ¡ \}}t	|ƒ}|| j|< || j|< qXd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 n6 tyB } ztd||f ƒ W Y d }~dS d }~0 0 d}|d t|ƒ }}|d t|ƒ }}|d t|ƒ }}i }g }| d¡rú| d¡rHt d|¡}ttt	| 
¡ ƒƒ\}	}
}g }t|ƒD ]F}|d t|ƒ }}t d|¡}ttt	| 
¡ ƒƒ\}}| ||f¡ qÎ|d t|ƒ }}|||	|
f< |d t|ƒ }}q’t d|¡}ttt	| 
¡ ƒƒ\}}g }t|ƒD ]R}|d t|ƒ }}t d	|¡}ttt	| 
¡ ƒƒ\}}	}
||	|
f }| |¡ qv| |¡ |d t|ƒ }}|d t|ƒ }}q†|| _i }t d
|¡}t	| d¡ƒ}t|ƒD ]Þ}|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 | < qÌq´||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¡ qV|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 n ty¸   Y n0 d S )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   sX   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   