
    h(                        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
 ddlmZ ddlmZmZ dd	lmZ dd
lmZmZmZmZmZ ddlmZ ddlmZ ddlmZ ddlmZmZm Z m!Z!m"Z" ee#df   Z$e G d d             Z% G d d      Z& G d d      Z'd(de$dee$   de#fdZ(	 	 	 	 	 d)de#dee#   de)de)dee   defdZ*de#d e#de)fd!Z+	 d(d"e#d#e#dee$   dej0                  fd$Z,d%e#de)fd&Z-e.d'k(  r ej^                   e0 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)IterableIterator)contextmanager)	dataclassfield)Logger)IOAnyOptionalUnioncast)Grammar)	TokenInfo)NL   )grammarparsepgentokentokenizezos.PathLike[str]c                   V    e Zd ZU eed<   dZee   ed<    ee      Z	ee
   ed<   ddZy)ReleaseRangestartNend)default_factorytokensc                 V    t        | j                        }| j                  |z   | _        y N)lenr   r   r   )selftotal_eatens     H/var/www/html/immo/lib/python3.12/site-packages/blib2to3/pgen2/driver.pylockzReleaseRange.lock.   s     $++&::+    )returnN)__name__
__module____qualname__int__annotations__r   r   r	   listr   r   r%    r&   r$   r   r   (   s-    JC#d3FDI3,r&   r   c                   l    e Zd ZdeddfdZeded    fd       ZdedefdZ	ddZ
defd	Zd
edefdZy)
TokenProxy	generatorr'   Nc                 .    || _         d| _        g | _        y )Nr   )_tokens_counter_release_ranges)r"   r1   s     r$   __init__zTokenProxy.__init__4   s     35r&   c              #      K   t        | j                        }| j                  j                  |       	 |  |j	                          y # |j	                          w xY wwr    )r   r4   r5   appendr%   )r"   release_ranges     r$   releasezTokenProxy.release9   sL     $T]]3##M2	!J  M s   1AA	 A	AApointc                     | j                   d   j                  }|t        |      k  r||   S |t        |      k\  r5t        | j                        }|j                  |       |t        |      k\  r5S )N)r5   r   r!   nextr3   r8   )r"   r;   eaten_tokensr   s       r$   eatzTokenProxy.eatD   so    ++B/663|$$&&3|,,T\\*##E* 3|,, Lr&   c                     | S r    r.   )r"   s    r$   __iter__zTokenProxy.__iter__N   s    r&   c                 4   | j                   D ]^  }|j                  J |j                  |j                  }}|| j                  cxk  r|k  s?n B|j                  | j                  |z
     } n t        | j                        }| xj                  dz  c_        |S )Nr   )r5   r   r   r4   r   r>   r3   )r"   r9   r   r   r   s        r$   __next__zTokenProxy.__next__Q   s     "11 	'M $$000&,,m.?.?3E++%,,T]]U-BC	' &Er&   toc                 F    	 | j                  |       y# t        $ r Y yw xY w)NTF)r@   StopIteration)r"   rE   s     r$   can_advancezTokenProxy.can_advancea   s+    	HHRL   		s    	  )r'   r0   )r(   r)   r*   r   r6   r   r   r:   r+   r@   rB   rD   boolrH   r.   r&   r$   r0   r0   3   sl    6# 6$ 6
 !,/ ! !  #  c d r&   r0   c            	           e Zd Zddedee   ddfdZddee   de	de
fdZ	 dd	ed
ee   de	de
fdZddede	de
fdZdededeeef   fdZy)r   Nr   loggerr'   c                 V    || _         |t        j                  t              }|| _        y r    )r   logging	getLoggerr(   rK   )r"   r   rK   s      r$   r6   zDriver.__init__m   s%    >&&x0Fr&   r   debugc                    t        |      }t        j                  | j                        }|j	                  |       d}d}g }dx}x}	x}
x}}d}|D ]  }|\  }}	}
}}|
||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                  |	   }|r3|J | j                  j                  dt        j                  |   |	|       |t        j                  k(  r$|j!                  t#        |	             ||	z   }d}d}	n8|t        j$                  k(  r%|j'                         }| j)                  ||      \  }}|j+                  t-        t.        |      |	||
f      r|r| j                  j                  d        n{d}|t        j                  t        j$                  hv r}|\  }}|	j                  d      s|t        j0                  k7  s|dz  }d} |
J t        j2                  d	||	||
f      |j4                  J |j4                  S )
z4Parse a series of tokens and return the syntax tree.)proxyr   r   N 
z%s %r (prefix=%r)zStop.zincomplete input)r0   r   Parserr   setupr   COMMENTr   endswithr   OPopmaprK   rO   tok_nameINDENTr8   r!   DEDENTpop_partially_consume_prefixaddtokenr   r+   FSTRING_MIDDLE
ParseErrorrootnode)r"   r   rO   rQ   plinenocolumnindent_columnstypevaluer   r   	line_textprefix	quintuples_linenos_column_prefix_indent_cols                      r$   parse_tokenszDriver.parse_tokenss   s    6"LL&	e$&1555u5u5sY 2	UI1:.D%Y(('50KFF3CU2KK0%*"(H$dh&788F%FFH$ix88F%F(((++66%!$>>$'aKFFuxx}}U+'''!!')=uf u||#%%c%j1 5.%,002"&"@"@"Uzz$sD/565/BKK%%g.Fell33  NFF ~~d#0D0D(D!]2	Ub $$$""#5tUVUOTTzz%%%zzr&   filenameencodingc                     t        ||      5 }|j                         }ddd       | j                  |      S # 1 sw Y   xY w)z(Parse a file and return the syntax tree.)rr   N)openreadparse_string)r"   rq   rr   rO   streamtexts         r$   
parse_filezDriver.parse_file   sC     (X. 	!&;;=D	!  u--	! 	!s	   9Arx   c                 h    t        j                   || j                        }| j                  ||      S )z*Parse a string and return the syntax tree.)r   )r   r   rp   )r"   rx   rO   r   s       r$   rv   zDriver.parse_string   s+    ""4>  //r&   rj   re   c                 8   g }d}d}d}|D ]{  }||z  }|rV|dk(  s|j                         r(||k  r#dj                  |      }||t        |      d  fc S |j                  |       d}d}d}`|dv r|dz  }j|dk(  rd}r|dk(  rd}zd}} dj                  |      |fS )	NrR   r   FrS   z 	r   T)stripjoinr!   r8   )	r"   rj   re   linescurrent_linecurrent_columnwait_for_nlcharress	            r$   r^   z Driver._partially_consume_prefix   s     	#DD L4<#))+0G ggen"F3s8:$666LL.#%L%&N"'K!#!"!" #+	#, wwu~|++r&   r    )F)NF)r(   r)   r*   r   r   r
   r6   r   r   rI   r   rp   Pathstrry   rv   r+   tupler^   r.   r&   r$   r   r   l   s     &1A T B8I#6 Bt BPR BJ MR..(0.EI.	.0 0T 0b 0
, ,S ,U3PS8_ ,r&   gt	cache_dirr'   c                 B   t         j                  j                  |       \  }}|dk(  rd}||z   dj                  t	        t
        t        j                              z   dz   }|r=t         j                  j                  |t         j                  j                  |            S |S )Nz.txtrR   .z.pickle)	ospathsplitextr~   mapr   sysversion_infobasename)r   r   headtailnames        r$   _generate_pickle_namer      s{    !!"%JD$v~$;#c3+;+;"<==	IDww||Irww'7'7'=>>r&   gpsaveforcerK   c                 :   |t        j                  t              }|t        |       n|}|st	        ||       s-t        j                  |       }|r	 |j                  |       |S |S t        j                         }|j                  |       |S # t        $ r Y |S w xY w)z'Load the grammar (maybe from a pickle).)rM   rN   r(   r   _newerr   generate_grammardumpOSErrorr   r   load)r   r   r   r   rK   gs         r$   r   r      s     ~""8,&(j	r	"bBF2rN!2226r
 H1H OO	r
H   Hs   B 	BBabc                     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)r   r   existsgetmtime)r   r   s     r$   r   r     sQ    77>>!77>>!77A"''"2"21"555r&   packagegrammar_sourcec                 N   t         j                  j                  |      r|rt        ||      nd}t	        ||      S t        t         j                  j                  |      |      }t        j                  | |      }|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.

    N)r   )r   r   isfiler   r   r   pkgutilget_datar   r   loads)r   r   r   r   pickled_namedatar   s          r$   load_packaged_grammarr     s     
ww~~n%AJ">9=PTNr22()9)9.)I9ULG\2DAGGDMHr&   argsc                      | st        t        j                  dd       } t        j                  t        j
                  t        j                  d       | D ]  }t        |dd        y)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)levelrw   formatT)r   r   )r   r   argvrM   basicConfigINFOstdoutr   )r   r   s     r$   mainr   '  sS    
 SXXab\"gll3::mT 0Rd$/0r&   __main__r    )zGrammar.txtNTFN)1__doc__
__author____all__iorM   r   r   r   collections.abcr   r   
contextlibr   dataclassesr   r	   r
   typingr   r   r   r   r   blib2to3.pgen2.grammarr   blib2to3.pgen2.tokenizer   blib2to3.pytreer   rR   r   r   r   r   r   r   r   r   r0   r   r   rI   r   r   r   r   r(   exitr+   r.   r&   r$   <module>r      s   3
^
$ 
  	  
 . % (  1 1 * -  4 3S$$% , , ,6 6rs, s,ld x~   #  	
 V 26c 6c 6d 6 DH"%2:4.__0
 
 
 zCHHSTV_ r&   