3
ÃÐ]‡  ã               @   sþ   d 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	ƒ  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S )z:
spark grammar differences over Python 3.3 for Python 3.4
é    )ÚPythonParserSingle)ÚPython33Parserc                   s$   e Zd Zdd„ Z‡ fdd„Z‡  ZS )ÚPython34Parserc             C   s   dS )ai  
        expr ::= LOAD_ASSERT


        # passtmt is needed for semantic actions to add "pass"
        suite_stmts_opt ::= pass

        whilestmt     ::= SETUP_LOOP testexpr returns come_froms POP_BLOCK COME_FROM_LOOP

        # Seems to be needed starting 3.4.4 or so
        while1stmt    ::= SETUP_LOOP l_stmts
                          COME_FROM JUMP_BACK POP_BLOCK COME_FROM_LOOP
        while1stmt    ::= SETUP_LOOP l_stmts
                          POP_BLOCK COME_FROM_LOOP

        # FIXME the below masks a bug in not detecting COME_FROM_LOOP
        # grammar rules with COME_FROM -> COME_FROM_LOOP already exist
        whileelsestmt     ::= SETUP_LOOP testexpr l_stmts_opt JUMP_BACK POP_BLOCK
                              else_suitel COME_FROM

        while1elsestmt    ::= SETUP_LOOP l_stmts JUMP_BACK _come_froms POP_BLOCK else_suitel
                              COME_FROM_LOOP

        # Python 3.4+ optimizes the trailing two JUMPS away

        # This is 3.4 only
        yield_from ::= expr GET_ITER LOAD_CONST YIELD_FROM

        _ifstmts_jump ::= c_stmts_opt JUMP_ABSOLUTE JUMP_FORWARD COME_FROM
        N© )ÚselfÚargsr   r   úW/home/psgendb/BIRCHDEV/python/lib/python3.6/site-packages/uncompyle6/parsers/parse34.pyÚp_misc34   s    zPython34Parser.p_misc34c                s    | j dƒ tt| ƒj||ƒ d S )Nz¯
        yield_from    ::= expr expr YIELD_FROM
        # 3.4.2 has this. 3.4.4 may now
        # while1stmt ::= SETUP_LOOP l_stmts COME_FROM JUMP_BACK COME_FROM_LOOP
        )Zremove_rulesÚsuperr   Úcustomize_grammar_rules)r   ÚtokensZ	customize)Ú	__class__r   r   r   8   s    z&Python34Parser.customize_grammar_rules)Ú__name__Ú
__module__Ú__qualname__r	   r   Ú__classcell__r   r   )r   r   r      s    r   c               @   s   e Zd ZdS )ÚPython34ParserSingleN)r   r   r   r   r   r   r   r   A   s   r   Ú__main__)ÚPYTHON_VERSIONÚIS_PYPYg333333@)Úget_scannerz²JUMP_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>U   s    r   c             C   s   g | ]}t jd d|ƒ‘qS )z_CONT$r   )r   r   )r   r   r   r   r   r   V   s    )Ú__doc__Zuncompyle6.parserr   Zuncompyle6.parsers.parse33r   r   r   r   ÚpZ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   Úprintr   r   r   r   Ú<module>   s(   +
