
    dQ                         d Z 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e          Zd	 Z	 	 ddZd Zd Zd Zedk    r$ ej         e e                                  dS dS )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                   >    e Zd Zd	dZd
dZd
dZd
dZddZd
dZdS )r   Nc                 Z    || _         |t          j                    }|| _        || _        d S )N)r   logging	getLoggerloggerconvert)selfr   r   r   s       &  /croot/python-split_1694437901252/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_plac/lib/python3.11/lib2to3/pgen2/driver.py__init__zDriver.__init__   s.    >&((F    Fc                 X   t          j        | j        | j                  }|                                 d}d}dx}x}x}x}	}
d}|D ]D}|\  }}}}	}
|||fk    rE||f|k    sJ ||f|f            |\  }}||k     r|d||z
  z  z  }|}d}||k     r||
||         z  }|}|t
          j        t
          j        fv r'||z  }|	\  }}|                    d          r|dz  }d}|t          j
        k    rt          j        |         }|r-| j                            dt          j        |         ||           |                    ||||f          r|r| j                            d            n>d}|	\  }}|                    d          r|dz  }d}Ft          j        d||||f          |j        S )	z4Parse a series of tokens and return the syntax tree.r   r   N 
z%s %r (prefix=%r)zStop.zincomplete input)r   Parserr   r   setupr	   COMMENTNLendswithr   OPopmapr   debugtok_nameaddtoken
ParseErrorrootnode)r   tokensr   plinenocolumntypevaluestartend	line_textprefix	quintuples_linenos_columns                  r   parse_tokenszDriver.parse_tokens&   s9    Lt|44				1555u5u5sY $	A $	AI1:.D%Y((('5000FF3CU2K000%*"(H$$dh&788F%FFH$$ix88F%F((+666%!$>>$'' aKFFux}U+ G!!"5"'."6vG G Gzz$77  /K%%g...F NFF~~d## ! "#5#'A A Azr   c                 `    t          j        |j                  }|                     ||          S z*Parse a stream and return the syntax tree.)r	   generate_tokensreadliner1   )r   streamr   r$   s       r   parse_stream_rawzDriver.parse_stream_rawV   s*    )&/::  ///r   c                 .    |                      ||          S r3   )r7   )r   r6   r   s      r   parse_streamzDriver.parse_stream[   s    $$VU333r   c                     t          j        |d|          5 }|                     ||          cddd           S # 1 swxY w Y   dS )z(Parse a file and return the syntax tree.r)encodingN)ioopenr9   )r   filenamer<   r   r6   s        r   
parse_filezDriver.parse_file_   s    WXsX666 	4&$$VU33	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4s   ;??c                     t          j        t          j        |          j                  }|                     ||          S )z*Parse a string and return the syntax tree.)r	   r4   r=   StringIOr5   r1   )r   textr   r$   s       r   parse_stringzDriver.parse_stringd   s5    )"+d*;*;*DEE  ///r   )NN)F)NF)	__name__
__module____qualname__r   r1   r7   r9   r@   rD    r   r   r   r      s           . . . .`0 0 0 0
4 4 4 44 4 4 4
0 0 0 0 0 0r   c                     t           j                            |           \  }}|dk    rd}||z   d                    t	          t
          t          j                            z   dz   S )Nz.txtr   .z.pickle)ospathsplitextjoinmapstrsysversion_info)gtheadtails      r   _generate_pickle_namerV   j   sV    !!"%%JD$v~~$;#c3+;"<"<===	IIr   Grammar.txtTFc                    |t          j                    }|t          |           n|}|st          ||           s|                    d|            t          j        |           }|rZ|                    d|           	 |                    |           nV# t          $ r }|                    d|           Y d}~n1d}~ww xY wn(t          j
                    }|                    |           |S )z'Load the grammar (maybe from a pickle).Nz!Generating grammar tables from %szWriting grammar tables to %szWriting failed: %s)r   r   rV   _newerinfor
   generate_grammardumpOSErrorr   Grammarload)rS   gpsaveforcer   ges          r   r   r   q   s    ~"$$&(j	r	"	"	"bB F2rNN 7<<<!"%% 	5KK6;;;5r



 5 5 50!444444445		5 O	r


Hs   >B 
B>B99B>c                    t           j                            |           sdS t           j                            |          sdS t           j                            |           t           j                            |          k    S )z0Inquire whether file a was written since file b.FT)rK   rL   existsgetmtime)abs     r   rY   rY      sc    7>>! u7>>! t7A"'"2"21"5"555r   c                 4   t           j                            |          rt          |          S t	          t           j                            |                    }t          j        | |          }t          j	                    }|
                    |           |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.

    )rK   rL   isfiler   rV   basenamepkgutilget_datar   r^   loads)packagegrammar_sourcepickled_namedatarc   s        r   load_packaged_grammarrt      sx     
w~~n%% ,N+++()9)9.)I)IJJLG\22DAGGDMMMHr   c                      | st           j        dd         } t          j        t          j        t           j        d           | D ]}t          |dd           dS )zMain 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)levelr6   formatT)ra   rb   )rQ   argvr   basicConfigINFOstdoutr   )argsrS   s     r   mainr}      sl    
  x|gl3:,. . . . 0 0Rd$/////4r   __main__)rW   NTFN)__doc__
__author____all__r=   rK   r   rm   rQ   r   r   r   r   r	   r
   objectr   rV   r   rY   rt   r}   rE   exitintrH   r   r   <module>r      sF    3
^
$ 
			 				   



 4 3 3 3 3 3 3 3 3 3 3 3 3 3J0 J0 J0 J0 J0V J0 J0 J0ZJ J J '+04   *6 6 6  (   zCHSSTTVV__ r   