Ë
    #´˜jQ  ã                   óÚ   — 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«        «      «       yy)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y)r   Nc                 óZ   — || _         |€t        j                  «       }|| _        || _        y )N)r   ÚloggingÚ	getLoggerÚloggerÚconvert)Úselfr   r   r   s       ú&lib/python3.12/lib2to3/pgen2/driver.pyÚ__init__zDriver.__init__   s*   € ØˆŒØˆ>Ü×&Ñ&Ó(ˆFØˆŒØˆ�ó    c                 óf  — t        j                  | j                  | j                  «      }|j	                  «        d}d}dx}x}x}x}	}
d}|D �]H  }|\  }}}}	}
|||fk7  r:||f|k  sJ ||f|f«       ‚|\  }}||k  r|d||z
  z  z  }|}d}||k  r
||
|| z  }|}|t
        j                  t
        j                  fv r#||z  }|	\  }}|j                  d«      r|dz  }d}Œ’|t        j                  k(  rt        j                  |   }|r/| j                  j                  dt        j                  |   ||«       |j                  ||||f«      r*|r| j                  j                  d«        |j"                  S d}|	\  }}|j                  d«      s�ŒB|dz  }d}�ŒK t        j                   d||||f«      ‚)	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&   sö  € ô �L‰L˜Ÿ™ t§|¡|Ó4ˆØ	�‰Œ	ØˆØˆØ15Ð5ˆÐ5ˆuÐ5�uÐ5˜s YØˆÜˆIØ1:Ñ.ˆD�%˜  YØ˜ Ð(Ò(Ø Ð'¨5Ò0ÐK°F¸FÐ3CÀUÐ2KÓKÐ0Ø%*Ñ"�˜(Ø˜HÒ$Ø˜d h°Ñ&7Ñ8Ñ8�FØ%�FØ�FØ˜HÒ$Ø˜i¨¨xÐ8Ñ8�FØ%�FØœ×(Ñ(¬(¯+©+Ð6Ñ6Ø˜%‘�Ø!$‘�˜Ø—>‘> $Ô'Ø˜a‘K�FØ�FØØ”u—x‘xÒÜ—}‘} UÑ+�ÙØ—‘×!Ñ!Ð"5Ü"'§.¡.°Ñ"6¸¸vôGà�z‰z˜$ ¨° Ô7ÙØ—K‘K×%Ñ% gÔ.Øð �z‰zÐð ˆFØ ‰NˆF�FØ�~‰~˜dÖ#Ø˜!‘�Ø’ðA  ôF ×"Ñ"Ð#5Ø#'¨°¸°óAð Ar   c                 ód   — t        j                  |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                 ó&   — | j                  ||«      S r3   )r7   )r   r6   r   s      r   Úparse_streamzDriver.parse_stream[   s   € à×$Ñ$ V¨UÓ3Ð3r   c                 ó‚   — t        j                  |d|¬«      5 }| j                  ||«      cddd«       S # 1 sw Y   yxY w)z(Parse a file and return the syntax tree.Úr)ÚencodingN)ÚioÚopenr9   )r   Úfilenamer<   r   r6   s        r   Ú
parse_filezDriver.parse_file_   s0   € ä�W‰W�X˜s¨XÕ6¸&Ø×$Ñ$ V¨UÓ3÷ 7×6Ò6ús   ™5µ>c                 óŠ   — t        j                  t        j                  |«      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   s4   € ä×)Ñ)¬"¯+©+°dÓ*;×*DÑ*DÓEˆØ× Ñ  ¨Ó/Ð/r   )NN)F)NF)	Ú__name__Ú
__module__Ú__qualname__r   r1   r7   r9   r@   rD   © r   r   r   r      s!   „ óó.ó`0ó
4ó4ô
0r   c                 óÀ   — t         j                  j                  | «      \  }}|dk(  rd}||z   dj                  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   sP   € Ü—‘×!Ñ! "Ó%�J€Dˆ$Øˆv‚~ØˆØ�$‰;˜Ÿ™¤#¤c¬3×+;Ñ+;Ó"<Ó=Ñ=À	ÑIÐIr   c                 óª  — |€t        j                  «       }|€t        | «      n|}|st        || «      sQ|j	                  d| «       t        j                  | «      }|r&|j	                  d|«       	 |j                  |«       |S |S t        j                  «       }|j                  |«       |S # t        $ r}|j	                  d|«       Y d}~|S d}~ww xY w)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Ô	"°b€BÙ”F˜2˜r”NØ�‰Ð7¸Ô<Ü×!Ñ! "Ó%ˆÙØ�K‰KÐ6¸Ô;ð5Ø—‘�r”
ð €Hˆ1€Hô �O‰OÓˆØ	�‰ˆrŒ
Ø€Høô ò 5Ø—‘Ð0°!×4Ð4ð €Hûð5ús   Á0B, Â,	CÂ5CÃCc                 ó   — t         j                  j                  | «      syt         j                  j                  |«      syt         j                  j                  | «      t         j                  j                  |«      k\  S )z0Inquire whether file a was written since file b.FT)rK   rL   ÚexistsÚgetmtime)ÚaÚbs     r   rX   rX   †   sQ   € ä�7‰7�>‰>˜!ÔØÜ�7‰7�>‰>˜!ÔØÜ�7‰7×Ñ˜AÓ¤"§'¡'×"2Ñ"2°1Ó"5Ñ5Ð5r   c                 ó   — t         j                  j                  |«      rt        |«      S t	        t         j                  j                  |«      «      }t        j                  | |«      }t        j                  «       }|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Údatarb   s        r   Úload_packaged_grammarrs   �   sf   € ô 
‡w�w‡~�~�nÔ%Ü˜NÓ+Ð+Ü(¬¯©×)9Ñ)9¸.Ó)IÓJ€LÜ×Ñ˜G \Ó2€DÜ�‰Ó€AØ‡G�GˆD„MØ€Hr   c                  óÀ   — | st         j                  dd } t        j                  t        j                  t         j
                  d¬«       | D ]  }t        |dd¬«       Œ y)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)Úlevelr6   ÚformatT)r`   ra   )rQ   Úargvr   ÚbasicConfigÚINFOÚstdoutr   )ÚargsrS   s     r   Úmainr|   £   sL   € ñ
 Ü�x‰x˜˜ˆ|ˆÜ×ÑœgŸl™l´3·:±:Ø,õ.ãˆÜ�R˜d¨$Ö/ð àr   Ú__main__)zGrammar.txtNTFN)Ú__doc__Ú
__author__Ú__all__r=   rK   r   rl   rQ   r   r   r   r   r	   r
   Úobjectr   rV   r   rX   rs   r|   rE   ÚexitÚintrH   r   r   Ú<module>r„      sŠ   ðñð 3€
à�^Ð
$€ó 
Û 	Û Û Û 
÷ 4Õ 3ôJ0ˆVô J0òZJð '+Ø04óò*6òò(ð ˆzÒØ€C‡H�H‰S‘T“V�‹_Õð r   