a
    åzeQ  ã                   @   s¨   d Z ddgZddlZddlZddlZddlZddlZddlmZm	Z	m
Z
mZmZ G dd„ deƒZdd	„ Zddd„Zdd„ Zdd„ Zdd„ Zedkr¤e eeƒ  ƒ¡ dS )z#Guido van Rossum <guido@python.org>ÚDriverÚload_grammaré    Né   )ÚgrammarÚparseÚtokenÚtokenizeÚpgenc                   @   sH   e Zd Zddd„Zddd„Zddd„Zdd	d
„Zddd„Zddd„ZdS )r   Nc                 C   s&   || _ |d u rt ¡ }|| _|| _d S ©N)r   ÚloggingÚ	getLoggerÚloggerÚconvert)Úselfr   r   r   © r   ú*/usr/lib/python3.9/lib2to3/pgen2/driver.pyÚ__init__   s
    zDriver.__init__Fc                 C   st  t  | j| j¡}| ¡  d}d}d  } } } }	}
d}|D ]}|\}}}}	}
|||fkr |\}}||k r„|d||  7 }|}d}||k r ||
||… 7 }|}|tjtjfv rØ||7 }|	\}}| d¡r<|d7 }d}q<|t	j
krìtj| }|r
| j dt	j| ||¡ | ||||f¡r6|r0| j d¡  qnd}|	\}}| d¡r<|d7 }d}q<t  d||||f¡‚|jS )Nr   r   Ú Ú
z%s %r (prefix=%r)zStop.zincomplete input)r   ZParserr   r   Zsetupr   ÚCOMMENTÚNLÚendswithr   ÚOPZopmapr   ÚdebugÚtok_nameZaddtokenZ
ParseErrorÚrootnode)r   Útokensr   ÚpÚlinenoÚcolumnÚtypeÚvalueÚstartÚendZ	line_textÚprefixZ	quintupleZs_linenoZs_columnr   r   r   Úparse_tokens&   sV    



ÿ

ÿzDriver.parse_tokensc                 C   s   t  |j¡}|  ||¡S r
   )r   Úgenerate_tokensÚreadliner%   )r   Ústreamr   r   r   r   r   Úparse_stream_rawV   s    zDriver.parse_stream_rawc                 C   s   |   ||¡S r
   )r)   )r   r(   r   r   r   r   Úparse_stream[   s    zDriver.parse_streamc                 C   s@   t j|d|d}|  ||¡W  d   ƒ S 1 s20    Y  d S )NÚr)Úencoding)ÚioÚopenr*   )r   Úfilenamer,   r   r(   r   r   r   Ú
parse_file_   s    zDriver.parse_filec                 C   s   t  t |¡j¡}|  ||¡S r
   )r   r&   r-   ÚStringIOr'   r%   )r   Útextr   r   r   r   r   Úparse_stringd   s    zDriver.parse_string)NN)F)F)F)NF)F)	Ú__name__Ú
__module__Ú__qualname__r   r%   r)   r*   r0   r3   r   r   r   r   r      s   

0


c                 C   s:   t j | ¡\}}|dkrd}|| d tttjƒ¡ d S )Nz.txtr   Ú.z.pickle)ÚosÚpathÚsplitextÚjoinÚmapÚstrÚsysÚversion_info)ÚgtÚheadÚtailr   r   r   Ú_generate_pickle_namej   s    rC   úGrammar.txtTFc              
   C   s°   |d u rt  ¡ }|d u r t| ƒn|}|s2t|| ƒsš| d| ¡ t | ¡}|r¬| d|¡ z| |¡ W q¬ ty– } z| d|¡ W Y d }~q¬d }~0 0 nt	 
¡ }| |¡ |S )Nz!Generating grammar tables from %szWriting grammar tables to %szWriting failed: %s)r   r   rC   Ú_newerÚinfor	   Zgenerate_grammarÚdumpÚOSErrorr   ÚGrammarÚload)r@   ZgpÚsaveÚforcer   ÚgÚer   r   r   r   q   s    
$
c                 C   s8   t j | ¡sdS t j |¡s dS t j | ¡t j |¡kS )NFT)r8   r9   ÚexistsÚgetmtime)ÚaÚbr   r   r   rE   †   s
    rE   c                 C   sF   t j |¡rt|ƒS tt j |¡ƒ}t | |¡}t 	¡ }| 
|¡ |S r
   )r8   r9   Úisfiler   rC   ÚbasenameÚpkgutilÚget_datar   rI   Úloads)ÚpackageZgrammar_sourceZpickled_nameÚdatarM   r   r   r   Úload_packaged_grammar   s    
rZ   c                  G   sB   | st jdd … } tjtjt jdd | D ]}t|ddd q*dS )Nr   z%(message)s)Úlevelr(   ÚformatT)rK   rL   )r>   Úargvr   ÚbasicConfigÚINFOÚstdoutr   )Úargsr@   r   r   r   Úmain£   s    ÿrb   Ú__main__)rD   NTFN)Ú
__author__Ú__all__r-   r8   r   rU   r>   r   r   r   r   r   r	   Úobjectr   rC   r   rE   rZ   rb   r4   ÚexitÚintr   r   r   r   Ú<module>   s"   M  ÿ
	