§
    ZQd!  ã                   óî   — 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       ú+/usr/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ˆÐ5ˆuÐ5�uÐ5˜s YØˆØð $	Añ $	AˆIØ1:Ñ.ˆD�%˜  YØ˜ Ð(Ò(Ð(Ø Ð'¨5Ò0Ð0Ð0°F¸FÐ3CÀUÐ2KÑ0Ô0Ð0Ø%*Ñ"�˜(Ø˜HÒ$Ð$Ø˜d h°Ñ&7Ñ8Ñ8�FØ%�FØ�FØ˜HÒ$Ð$Ø˜i¨¨x¨Ô8Ñ8�FØ%�FØ�Ô(­(¬+Ð6Ð6Ð6Ø˜%‘�Ø!$‘�˜Ø—>’> $Ñ'Ô'ð Ø˜a‘K�FØ�FØØ•u”xÒÐÝ”} UÔ+�Øð GØ”×!Ò!Ð"5Ý"'¤.°Ô"6¸¸vñGô Gð Gà�zŠz˜$ ¨° Ñ7Ô7ð Øð /Ø”K×%Ò% gÑ.Ô.Ð.Ø�ØˆFØ ‰NˆF�FØ�~Š~˜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   € à×$Ò$ V¨UÑ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�   € åŒW�X˜s¨XÐ6Ñ6Ô6ð 	4¸&Ø×$Ò$ V¨UÑ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   € Ý”×!Ò! "Ñ%Ô%�J€Dˆ$Øˆv‚~€~ØˆØ�$‰;˜Ÿš¥#¥c­3Ô+;Ñ"<Ô"<Ñ=Ô=Ñ=À	ÑIÐIr   úGrammar.txtTFc                 ó   — |€t          j        ¦   «         }|€t          | ¦  «        n|}|st          || ¦  «        s+|                     d| ¦  «         t          j        | ¦  «        }n(t          j
        ¦   «         }|                     |¦  «         |S )z'Load the grammar (maybe from a pickle).Nz!Generating grammar tables from %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”Nð Ø�ŠÐ7¸Ñ<Ô<Ð<ÝÔ! "Ñ%Ô%ˆð	5õ ŒOÑÔˆØ	�Šˆr‰
Œ
ˆ
Ø€Hr   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Ò"2°1Ñ"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ÔJ€LÝÔ˜G \Ñ2Ô2€DÝŒÑÔ€AØ‡G‚GˆD�M„M€MØ€Hr   c                  ó¶   — | st           j        dd…         } t          j        t          j        t           j        d¬¦  «         | D ]}t          |dd¬¦  «         ŒdS )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)ra   rb   )rQ   Úargvr   ÚbasicConfigÚINFOÚstdoutr   )ÚargsrS   s     r   Úmainr}   ¦   sl   € ð
 ð ÝŒx˜˜˜Œ|ˆÝÔ�gœlµ3´:Ø,ð.ñ .ô .ð .àð 0ð 0ˆÝ�R˜d¨$Ð/Ñ/Ô/Ð/Ð/Øˆ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0ˆVñ J0ô J0ð J0ðZJð Jð Jð '+Ø04ðð ð ð ð06ð 6ð 6ðð ð ð(ð ð ð ˆzÒÐØ€C„HˆSˆS�T�T‘V”V�‰_Œ_ÑÔÐÐÐð Ðr   