3 \�%�@s.ddlZddlmZmZGdd�dej�ZdS)�N)�grammar�tokenc@s,eZdZdd�Zdd�Zdd�Zdd�Zd S) � ConvertercCs |j|�|j|�|j�dS)N)�parse_graminit_h�parse_graminit_c� finish_off)�selfZ graminit_hZ graminit_c�r �*/usr/lib64/python3.6/lib2to3/pgen2/conv.py�run/s  z Converter.runc Cs�y t|�}Wn0tk r<}ztd||f�dSd}~XnXi|_i|_d}xn|D]f}|d7}tjd|�}| r�|j�r�td|||j�f�qT|j�\}}t |�}||j|<||j|<qTWdS)NzCan'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 r5s&     zConverter.parse_graminit_hc!Cs�y t|�}Wn0tk r<}ztd||f�dSd}~XnXd}|dt|�}}|dt|�}}|dt|�}}i}g}�x�|jd��rx�|jd��rLtjd|�}ttt |j ���\} } } g} xRt | �D]F} |dt|�}}tjd|�}ttt |j ���\}}| j ||f�q�W|dt|�}}| || | f<|dt|�}}q�Wtjd|�}ttt |j ���\}}g}x^t |�D]R} |dt|�}}tjd |�}ttt |j ���\} } } || | f} |j | ��q~W|j |�|dt|�}}|dt|�}}q�W||_ i}tjd |�}t |jd��}x�t |�D]�}|dt|�}}tjd |�}|jd �}ttt |jdd dd���\}}}}||}|dt|�}}tjd|�}i}t|jd��}xPt|�D]D\}}t|�}x0t d�D]$}|d|>@�r�d||d|<�q�W�q�W||f||<�q4W|dt|�}}||_g}|dt|�}}tjd|�}t |jd��}xjt |�D]^}|dt|�}}tjd|�}|j �\}}t |�}|dk�r�d}nt|�}|j ||f��qpW|dt|�}}||_|dt|�}}|dt|�}}tjd|�}t |jd��}|dt|�}}|dt|�}}tjd|�}t |jd��}|dt|�}}tjd|�}t |jd��} | |_|dt|�}}y|dt|�}}Wntk �r�YnXdS)NzCan't open %s: %sFrr 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+)},$zstatic 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 rr�next� startswithrr�list�maprr�range�append�states�group�eval� enumerate�ord�dfas�labels�start� StopIteration)!rrrrrrZallarcsr)r�n�m�kZarcs�_�i�j�s�t�stater.Zndfasrr�x�y�z�firstZ rawbitset�cZbyter/Znlabelsr0r r r rTs�         "        zConverter.parse_graminit_ccCs\i|_i|_xJt|j�D]<\}\}}|tjkrB|dk rB||j|<q|dkr||j|<qWdS)N)�keywords�tokensr,r/r�NAME)rZilabel�type�valuer r r r�s zConverter.finish_offN)�__name__� __module__� __qualname__r rrrr r r r r$s  &r)rZpgen2rrZGrammarrr r r r �s