3
/*^                 @   sd  d Z ddlmZ ddlmZ ddlmZ G dd deZG dd deeZe	d	kr`e Z
e
j  e
j  dd
lmZmZ edkr`e
j \ZZZZZddlmZ eeeZeejjjedj Zeee Zddl Z edd eD Zedd eD Zeee Ze!e ddl"Z"e#e"j$dkr`ddl%m&Z& x(e'e
j(j) D ]Z*e!e&e*d  qFW dS )z;
spark grammar differences over Python 3.2 for Python 3.1.
    )print_function)PythonParserSingle)Python32Parserc                   s,   e Zd Zdd Zdd Z fddZ  ZS )Python31Parserc             C   s   dS )a  
        subscript2     ::= expr expr DUP_TOPX BINARY_SUBSCR

        setupwith      ::= DUP_TOP LOAD_ATTR store LOAD_ATTR CALL_FUNCTION_0 POP_TOP
        setupwithas    ::= DUP_TOP LOAD_ATTR store LOAD_ATTR CALL_FUNCTION_0 store
        with           ::= expr setupwith SETUP_FINALLY
                           suite_stmts_opt
                           POP_BLOCK LOAD_CONST COME_FROM_FINALLY
                           load del_stmt WITH_CLEANUP END_FINALLY

        # Keeps Python 3.1 withas desigator in the same position as it is in other version
        setupwithas31  ::= setupwithas SETUP_FINALLY load del_stmt

        withasstmt     ::= expr setupwithas31 store
                           suite_stmts_opt
                           POP_BLOCK LOAD_CONST COME_FROM_FINALLY
                           load del_stmt WITH_CLEANUP END_FINALLY

        store ::= STORE_NAME
        load  ::= LOAD_FAST
        load  ::= LOAD_NAME
        N )selfargsr   r   W/home/psgendb/BIRCHDEV/python/lib/python3.6/site-packages/uncompyle6/parsers/parse31.pyp_31   s    zPython31Parser.p_31c             C   s   | j d d S )Na  
        # DUP_TOP_TWO is DUP_TOPX in 3.1 and earlier
        subscript2 ::= expr expr DUP_TOP_TWO BINARY_SUBSCR

        # The were found using grammar coverage
        list_if     ::= expr jmp_false list_iter COME_FROM
        list_if_not ::= expr jmp_true list_iter COME_FROM
        )Zremove_rules)r   r   r   r	   remove_rules_31#   s    zPython31Parser.remove_rules_31c                s   t t| j|| | j  d S )N)superr   customize_grammar_rulesr   )r   tokensZ	customize)	__class__r   r	   r   -   s    z&Python31Parser.customize_grammar_rules)__name__
__module____qualname__r
   r   r   __classcell__r   r   )r   r	   r   
   s   
r   c               @   s   e Zd ZdS )Python31ParserSingleN)r   r   r   r   r   r   r	   r   3   s   r   __main__)PYTHON_VERSIONIS_PYPYg@)get_scannerzJUMP_BACK CONTINUE RETURN_END_IF COME_FROM
               LOAD_GENEXPR LOAD_ASSERT LOAD_SETCOMP LOAD_DICTCOMP LOAD_CLASSNAME
               LAMBDA_MARKER RETURN_LAST
            Nc             C   s   g | ]}t jd d|qS )z_\d+$ )resub).0tr   r   r	   
<listcomp>H   s    r   c             C   s   g | ]}t jd d|qS )z_CONT$r   )r   r   )r   r   r   r   r	   r   I   s       )rule2str)+__doc__
__future__r   Zuncompyle6.parserr   Zuncompyle6.parsers.parse32r   r   r   r   pr   Zcheck_grammar
uncompyle6r   r   Z
check_setslhsrhsr   Zright_recursiveZdup_rhsZuncompyle6.scannerr   ssetZopcopnameunionsplitZ
opcode_setZremain_tokensr   printsyslenargvZspark_parser.sparkr    sortedZ	rule2nameitemsZruler   r   r   r	   <module>   s6   )


