B
    2*\P                 @   s  d dl Z ed\ZZZZZe de je j	B j
Ze de jjZe de je jB jZe de jjZe de jjZe de jjZG d	d
 d
eZeeddZedd dD  edd dD  edd dD  G dd dZedkrd dlmZ eddd dS )    N   z
    ^
    [ \t]*
    (?: while
    |   else
    |   def
    |   return
    |   assert
    |   break
    |   class
    |   continue
    |   elif
    |   try
    |   except
    |   raise
    |   import
    |   yield
    )
    \b
z'
    [ \t]*
    (?: \# \S .* )?
    \n
aK  
    \""" [^"\\]* (?:
                     (?: \\. | "(?!"") )
                     [^"\\]*
                 )*
    (?: \""" )?

|   " [^"\\\n]* (?: \\. [^"\\\n]* )* "?

|   ''' [^'\\]* (?:
                   (?: \\. | '(?!'') )
                   [^'\\]*
                )*
    (?: ''' )?

|   ' [^'\\\n]* (?: \\. [^'\\\n]* )* '?
zM
    [ \t]*
    [^\s#\\]    # if we match, m.end()-1 is the interesting char
z_
    \s*
    (?: return
    |   break
    |   continue
    |   raise
    |   pass
    )
    \b
z
    [^[\](){}#'"\\]+
c               @   s   e Zd Zdd ZdS )ParseMapc             C   s   dS )Nx    )selfkeyr   r   :C:\ALexclude\prg\programme\Python37\Lib\idlelib\pyparse.py__missing__r   s    zParseMap.__missing__N)__name__
__module____qualname__r	   r   r   r   r   r   f   s   r      r   c             c   s   | ]}t |t d fV  qdS )(N)ord).0cr   r   r   	<genexpr>x   s    r   z({[c             c   s   | ]}t |t d fV  qdS ))N)r   )r   r   r   r   r   r   y   s    z)}]c             c   s   | ]}t |t |fV  qd S )N)r   )r   r   r   r   r   r   z   s    z"'\
#c               @   s   e Zd Zdd Zdd ZdefddZdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )Parserc             C   s   || _ || _d S )N)indentwidthtabwidth)r   r   r   r   r   r   __init__   s    zParser.__init__c             C   s   || _ d| _d S )Nr   )codestudy_level)r   sr   r   r   set_code   s    zParser.set_codeNc       
      C   s   | j d  }}|sd S t|}xdtdD ]X}|dd|}|dk rBP |dd|d }||||}|rz|| sz| }P |}q&W |d kr||}|r|| s| }|S |d }x.|||}|r| \}	}||	s|	}qP qW |S )Nr   z:
r   
   )r   lenrangerfindstartspan)
r   Zis_char_in_string_synchrer   poslimitZtriesimr   r   r   r   find_good_parse_start   s8    	
zParser.find_good_parse_startc             C   s   |dkr| j |d  | _ d S )Nr   )r   )r   lor   r   r   set_lo   s    zParser.set_loc             C   s  | j dkrd S d| _ | j}|t}|dd}|dd}|dd}|dd}|dd}t}d }}dg | _}|j}dt| }}x||k rn|| }	|d }|	dkrq|	dkr|d }|dkr|| q|	d	kr|d }q|	d
kr |r|d }q|	dks|	dkr$|	}
||d |d  |
d kr>|
d }
|}t|
d }|| }x||k r|| }	|d }|	dkrqX||d ||  |
kr|| }P |	dkr|d }|dkrX|dkr|| P qX|	dkrX|| dkr|d }|d }qXqXW |d |krt	}qt
}q|	dkr<|d|}q|| dkrd|d }|d |krdt}|d }qW |t	kr|t
kr|dkrt}|| _|d |kr|| d S )Nr   ZxxxxxxxxxZxxxxZxxz
xr   r   r   r   "'      \#)r   r   	translatetransreplaceC_NONE	goodlinesappendr   C_STRING_FIRST_LINEC_STRING_NEXT_LINESfindC_BACKSLASH	C_BRACKETcontinuation)r   r   r>   levelZlnor7   Z	push_goodr&   nchquoteZfirstlnowr   r   r   _study1   s    










zParser._study1c             C   s   |    | jS )N)rD   r>   )r   r   r   r   get_continuation_typeT  s    zParser.get_continuation_typec             C   s  | j dkrd S |   d| _ | j| j }}t|d }t|}xX|r|}x4t||d  || D ]}|dd|d d }q`W t||r|d }q@P q@W |dkr|}|| | _| _	d}g }|j
}	|dfg}
x||k rxt|||}|rD| }|d }x&||kr || dkr |d } qW ||kr4|| }|}||krDP || }|dkr~|	| |

|t|f |}|d }q|dkr|r|d	= |}|d }|

|t|f q|d
ks|dkr|

|t|d f |}t||| }|

|t|f q|dkrL|

|t|d f |d||d }|

|t|f q|d }|| dkrn|||  }|d }qW || _|r|d	 nd | _t|
| _d S )Nr.   r   r   r    z 	
z([{z)]}r2   r,   r-   r1   )r   rD   r   r7   r   r   r    _junkre
stmt_startstmt_endr8   _chew_ordinaryreend_match_stringrer;   lastchlastopenbracketpostuplestmt_bracketing)r   r   r7   r&   pqZnothingrM   stackZ
push_stackZ
bracketingr'   ZnewprA   r   r   r   _study2X  s    








zParser._study2c             C   s   |    | j}| j}t|}|dd|d  }}|d }xj||k r|t||}|rf| d }d}P q<|d|d  }}q<W | }}x|| dkr|d }qW | j}t||| 	| j
| S )Nr   r   r   z 	)rT   rN   r   r   r    _itemrerK   r;   r   
expandtabsr   )r   jr   r@   Zorigir&   r'   Zextrar   r   r   compute_bracket_indent  s$    

zParser.compute_bracket_indentc             C   s   |    | j}|d |d  S )Nr2   )rD   r7   )r   r7   r   r   r   get_num_lines_in_stmt  s    zParser.get_num_lines_in_stmtc             C   s  |    | j}| j}x|| dkr,|d }qW |}|d|d }d }}x||k r|| }|dkrx|d }|d }qL|dkr|r|d }|d }qL|dks|dkrt||| }qL|d	krP qL|dkr|d
kr|dks||d  dkr||d  d
krd}P qL|d }qLW |r>|d }td||| d k}|sf|}x|| dkrd|d }qJW t|| j| 	| j
d S )Nz 	r   r   r   z([{z)]}r,   r-   r1   =z=<>!z\s*\\z 	
)rT   r   rH   r;   rL   rK   rematchr   rV   r   )r   r   r&   startposendposfoundr?   rA   r   r   r   compute_backslash_indent  sH    

zParser.compute_backslash_indentc             C   sN   |    | j| j }}|}| j}x ||k r@|| dkr@|d }q"W ||| S )Nz 	r   )rT   rH   rI   r   )r   r&   r@   rW   r   r   r   r   get_base_indent_string5  s    zParser.get_base_indent_stringc             C   s   |    | jdkS )N:)rT   rM   )r   r   r   r   is_block_openerA  s    zParser.is_block_openerc             C   s   |    t| j| jd k	S )N)rT   _closerer   rH   )r   r   r   r   is_block_closerF  s    zParser.is_block_closerc             C   s   |    | jS )N)rT   rP   )r   r   r   r   get_last_stmt_bracketingK  s    zParser.get_last_stmt_bracketing)r
   r   r   r   r   r#   r(   r*   rD   rE   rT   rX   rZ   ra   rb   rd   rf   rg   r   r   r   r   r   }   s    <	 {
9r   __main__)mainzidlelib.idle_test.test_pyparser.   )	verbosity)r\   r   r6   r<   r9   r:   r=   compileVERBOSE	MULTILINEsearchr#   r]   rG   DOTALLrL   rU   re   rJ   dictr   fromkeysr4   updater   r
   Zunittestri   r   r   r   r   <module>   s2   	   Z
