관리-도구
편집 파일: driver.cpython-39.pyc
a �����DOgQ����������������������@���s����d�Z�dZddgZddlZddlZddlZddlZddlZddlm Z m Z mZmZm Z �G�dd��de�Zd d ��Zddd�Zdd��Zdd��Zdd��Zedkr�e�ee������dS�)zZParser driver. This provides a high-level interface to parse a file into a syntax tree. z#Guido van Rossum <guido@python.org>�Driver�load_grammar�����N����)�grammar�parse�token�tokenize�pgenc�������������������@���sH���e�Zd�Zddd�Zddd�Zddd�Zdd d �Zddd�Zdd d�ZdS�)r���Nc�����������������C���s&���||�_�|d�u�rt���}||�_||�_d�S�)N)r����logging� getLogger�logger�convert)�selfr���r ���r�����r����,/usr/lib64/python3.9/lib2to3/pgen2/driver.py�__init__���s ����zDriver.__init__Fc�����������������C���s���t��|�j|�j�}|����d}d}d�}�}�}�} } d}|D��]8}|\}}}} } |||fkr�||f|ksxJ�||f|f��|\} }|| k�r�|d| |��7�}| }d}||k�r�|| ||��7�}|}|tjtjfv�r�||7�}| \}}|�d�r<|d7�}d}q<|t j k�r tj|�}|�r(|�j� dt j|�||��|�||||f��rT|�rN|�j� d����q�d}| \}}|�d�r<|d7�}d}q<t��d||||f��|jS�) z4Parse a series of tokens and return the syntax tree.r���r���N��� z%s %r (prefix=%r)zStop.zincomplete input)r���ZParserr���r ���Zsetupr����COMMENT�NL�endswithr����OPZopmapr����debug�tok_nameZaddtokenZ ParseError�rootnode)r����tokensr����p�lineno�column�type�value�start�endZ line_text�prefixZ quintupleZs_linenoZs_columnr���r���r����parse_tokens&���sX���� � �zDriver.parse_tokensc�����������������C���s���t��|j�}|��||�S��z*Parse a stream and return the syntax tree.)r����generate_tokens�readliner$���)r����streamr���r���r���r���r����parse_stream_rawV���s����zDriver.parse_stream_rawc�����������������C���s���|���||�S�r%���)r)���)r���r(���r���r���r���r����parse_stream[���s����zDriver.parse_streamc�����������������C���s@���t�j|d|d��}|��||�W��d����S�1�s20����Y��dS�)z(Parse a file and return the syntax tree.�r)�encodingN)�io�openr*���)r����filenamer,���r���r(���r���r���r���� parse_file_���s����zDriver.parse_filec�����������������C���s���t��t�|�j�}|��||�S�)z*Parse a string and return the syntax tree.)r���r&���r-����StringIOr'���r$���)r����textr���r���r���r���r����parse_stringd���s����zDriver.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�|��\}}|dkrd}||�d�tttj���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����|du�rt����}|du�r t|��n|}|s2t||��s�|�d|���t�|��}|r�|�d|��z|�|��W�q��ty��}�z|�d|��W�Y�d}~q�d}~0�0�nt � ��}|�|��|S�)z'Load the grammar (maybe from a pickle).Nz!Generating grammar tables from %szWriting grammar tables to %szWriting failed: %s)r ���r���rC����_newer�infor ���Zgenerate_grammar�dump�OSErrorr����Grammar�load)r@���Zgp�save�forcer����g�er���r���r���r���q���s���� $ c�����������������C���s8���t�j�|��sdS�t�j�|�s dS�t�j�|��t�j�|�kS�)z0Inquire whether file a was written since file b.FT)r8���r9����exists�getmtime)�a�br���r���r���rE�������s ����rE���c�����������������C���sF���t�j�|�rt|�S�tt�j�|��}t�|�|�}t� ��}|� |��|S�)a���Normally, loads a pickled grammar by doing pkgutil.get_data(package, pickled_grammar) where *pickled_grammar* is computed from *grammar_source* by adding the Python version and using a ``.pickle`` extension. However, if *grammar_source* is an extant file, load_grammar(grammar_source) is called instead. This facilitates using a packaged grammar file when needed but preserves load_grammar's automatic regeneration behavior when possible. )r8���r9����isfiler���rC����basename�pkgutil�get_datar���rI����loads)�packageZgrammar_sourceZpickled_name�datarM���r���r���r����load_packaged_grammar����s���� rZ���c������������������G���sB���|�st�jdd��}�tjtjt�jdd��|�D�]}t|ddd��q*dS�)z�Main program, when run as a script: produce grammar pickle files. Calls load_grammar for each argument, a path to a grammar text file. r���Nz%(message)s)�levelr(����formatT)rK���rL���)r>����argvr ����basicConfig�INFO�stdoutr���)�argsr@���r���r���r����main����s�����rb����__main__)rD���NTFN)�__doc__� __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���