3 \%@s.ddlZddlmZmZGdddejZdS)N)grammartokenc@s,eZdZddZddZddZddZd S) ConvertercCs |j||j||jdS)N)parse_graminit_hparse_graminit_c finish_off)selfZ graminit_hZ graminit_cr */usr/lib64/python3.6/lib2to3/pgen2/conv.pyrun/s  z Converter.runc Csy t|}Wn0tk r<}ztd||fdSd}~XnXi|_i|_d}xn|D]f}|d7}tjd|}| r|jrtd|||jfqT|j\}}t |}||j|<||j|<qTWdS)NzCan't open %s: %sFrz^#define\s+(\w+)\s+(\d+)$z%s(%s): can't parse %sT) openOSErrorprintZ symbol2numberZ number2symbolrematchstripgroupsint) rfilenameferrlinenolinemosymbolnumberr r r r5s&     zConverter.parse_graminit_hc!Csy t|}Wn0tk r<}ztd||fdSd}~XnXd}|dt|}}|dt|}}|dt|}}i}g}x|jdrx|jdrLtjd|}ttt |j \} } } g} xRt | D]F} |dt|}}tjd|}ttt |j \}}| j ||fqW|dt|}}| || | f<|dt|}}qWtjd|}ttt |j \}}g}x^t |D]R} |dt|}}tjd |}ttt |j \} } } || | f} |j | q~W|j ||dt|}}|dt|}}qW||_ i}tjd |}t |jd}xt |D]}|dt|}}tjd |}|jd }ttt |jdd dd\}}}}||}|dt|}}tjd|}i}t|jd}xPt|D]D\}}t|}x0t dD]$}|d|>@rd||d|<qWqW||f||<q4W|dt|}}||_g}|dt|}}tjd|}t |jd}xjt |D]^}|dt|}}tjd|}|j \}}t |}|dkrd}nt|}|j ||fqpW|dt|}}||_|dt|}}|dt|}}tjd|}t |jd}|dt|}}|dt|}}tjd|}t |jd}|dt|}}tjd|}t |jd} | |_|dt|}}y|dt|}}Wntk rYnXdS)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 rrnext startswithrrlistmaprrrangeappendstatesgroupeval enumerateorddfaslabelsstart StopIteration)!rrrrrrZallarcsr)rnmkZarcs_ijststater.ZndfasrrxyzfirstZ rawbitsetcZbyter/Znlabelsr0r r r rTs         "        zConverter.parse_graminit_ccCs\i|_i|_xJt|jD]<\}\}}|tjkrB|dk rB||j|<q|dkr||j|<qWdS)N)keywordstokensr,r/rNAME)rZilabeltypevaluer r r rs zConverter.finish_offN)__name__ __module__ __qualname__r rrrr r r r r$s  &r)rZpgen2rrZGrammarrr r r r s