ZL i( dZdZddgZddlZddlZddlZddlZddlZddlm Z m Z ddl m Z ddl mZmZdd lmZdd lmZmZmZmZmZdd lmZdd lmZdd lmZddlmZmZm Z m!Z!m"Z"ee#dfZ$eGddZ%GddZ&GddZ'd(de$dee$de#fdZ( d)de#dee#de)de)deedef dZ*de#d e#de)fd!Z+ d(d"e#d#e#dee$dej0fd$Z,d%e#de)fd&Z-e.d'k(rej^e0e- yy)*zZParser driver. This provides a high-level interface to parse a file into a syntax tree. z#Guido van Rossum Driver load_grammarN)IterableIterator)contextmanager) dataclassfield)Logger)IOAnyOptionalUnioncast)Grammar) TokenInfo)NL)grammarparsepgentokentokenizezos.PathLike[str]cVeZdZUeed<dZeeed<eeZ ee ed<ddZ y) ReleaseRangestartNend)default_factorytokenscVt|j}|j|z|_yN)lenrrr)self total_eatens [/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/blib2to3/pgen2/driver.pylockzReleaseRange.lock.s $++& :: +)returnN) __name__ __module__ __qualname__int__annotations__rr r listrr r%r&r$rr(s- JC#d3FDI3,r&rcleZdZdeddfdZededfdZdedefdZ d dZ defd Z d ede fd Z y) TokenProxy generatorr'Nc.||_d|_g|_y)Nr)_tokens_counter_release_ranges)r"r1s r$__init__zTokenProxy.__init__4s   35r&c#Kt|j}|jj| ||j y#|j wxYwwr )rr4r5appendr%)r" release_ranges r$releasezTokenProxy.release9sL$T]]3  ##M2 !J    M   s1AA A AApointc|jdj}|t|kr||S|t|k\r5t|j}|j ||t|k\r5S)N)r5rr!nextr3r8)r"r; eaten_tokensrs r$eatzTokenProxy.eatDso++B/66 3|$ $& &3|,,T\\*##E*3|,,Lr&c|Sr r.)r"s r$__iter__zTokenProxy.__iter__Ns r&c4|jD]^}|jJ|j|j}}||jcxkr|ks?nB|j|j|z }nt |j }|xjdz c_|S)Nr)r5rrr4rr>r3)r"r9rrrs r$__next__zTokenProxy.__next__Qs"11 'M $$0 00&,,m.?.?3E ++%,,T]]U-BC  '&E   r&tocF |j|y#t$rYywxYw)NTF)r@ StopIteration)r"rEs r$ can_advancezTokenProxy.can_advanceas+  HHRL  s   )r'r0)r(r)r*r r6rrr:r+r@rBrDboolrHr.r&r$r0r03sl6#6$6 !,/!!# cdr&r0c eZdZddedeeddfdZddeede de fdZ dd e d ee de de fd Zdd e de de fd Zde dedee e ffdZy)rNrloggerr'cV||_|tjt}||_yr )rlogging getLoggerr(rK)r"rrKs r$r6zDriver.__init__ms% >&&x0F r&rdebugc&t|}tj|j}|j |d}d}g}dx}x} x} x} } d} |D]}|\}} } } } | ||fk7r:||f| ks J||f| f| \}}||kr| d||z zz } |}d}||kr | | ||z } |}|t j t jfvr#| | z } | \}}| jdr|dz }d}|tjk(rtj| }|r3|J|jjdtj|| | |tjk(r$|j!t#| | | z}d} d} n8|tj$k(r%|j'}|j)| |\} }|j+t-t.|| | | fr|r|jjdnd} |tjtj$hvr} | \}}| jds|tj0tj2fvs|dz }d} | Jtj4d || | | f|j6J|j6S) z4Parse a series of tokens and return the syntax tree.)proxyrrN z%s %r (prefix=%r)zStop.zincomplete input)r0rParserrsetuprCOMMENTrendswithrOPopmaprKrOtok_nameINDENTr8r!DEDENTpop_partially_consume_prefixaddtokenrr+FSTRING_MIDDLETSTRING_MIDDLE ParseErrorrootnode)r"rrOrQplinenocolumnindent_columnstypevaluerr line_textprefix quintuples_linenos_column_prefix _indent_cols r$ parse_tokenszDriver.parse_tokensss6" LL & e$&1555u5u5sY6 UI1: .D%Y(('50KFF3CU2KK0%*"(H$dh&788F%FFH$ix88F%F(((++66%!$>>$'aKFFuxx}}U+''' !!')=ufu||#%%c%j1 5.%,002 "&"@"@"Uzz$sD/565/BKK%%g.F ell33  NFF~~d#$$$$5)! e6 Uj$ $$""#5tUVUOT Tzz%%%zzr&filenameencodingct||5}|j}ddd|j|S#1swYxYw)z(Parse a file and return the syntax tree.)rsN)openread parse_string)r"rrrsrOstreamtexts r$ parse_filezDriver.parse_filesC(X . !&;;=D !  u-- ! !s 9Arychtj||j}|j||S)z*Parse a string and return the syntax tree.)r)rrrq)r"ryrOrs r$rwzDriver.parse_strings+""4>  //r&rkrfc8g}d}d}d}|D]{}||z }|rV|dk(s|jr(||kr#dj|}||t|dfcS|j|d}d}d}`|dvr|dz }j|dk(rd}r|dk(rd}zd}}dj||fS) NrRrFrSz r T)stripjoinr!r8) r"rkrflines current_linecurrent_column wait_for_nlcharress r$r^z Driver._partially_consume_prefixs   #D D L4<#))+0G ggen"F3s8:$666LL.#%L%&N"'K!#!"!"# + #,wwu~|++r&r )F)NF)r(r)r*rr r r6rrrIrrqPathstrrzrwr+tupler^r.r&r$rrls&1AT F8I#6FtFPRFRMR..(0 .EI. .00T0b0 ,,S,U3PS8_,r&gt cache_dirr'cBtjj|\}}|dk(rd}||zdjt t t jzdz}|r=tjj|tjj|S|S)Nz.txtrR.z.pickle) ospathsplitextrmaprsys version_infobasename)rrheadtailnames r$_generate_pickle_namers{!!"%JD$ v~ $;#c3+;+;"<= = IDww||Irww'7'7'=>> r&gpsaveforcerKc:|tjt}| t|n|}|s t ||s-t j |}|r |j||S|Stj}|j||S#t$rY|SwxYw)z'Load the grammar (maybe from a pickle).) rMrNr(r_newerrgenerate_grammardumpOSErrorrrload)rrrrrKgs r$rrs~""8,&(j r "bB F2rN!2226  r  H1H OO  r H   H  sB BBabctjj|sytjj|sytjj|tjj|k\S)z0Inquire whether file a was written since file b.FT)rrexistsgetmtime)rrs r$rr sQ 77>>!  77>>!  77  A "''"2"21"5 55r&packagegrammar_sourcecNtjj|r|r t||nd}t ||Sttjj ||}t j||}|Jtj}|j||S)aNormally, 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) rrisfilerrrpkgutilget_datarrloads)rrrr pickled_namedatars r$load_packaged_grammarrs ww~~n%AJ ">9 =PTNr22()9)9.)I9UL   G\ 2D   AGGDM Hr&argsc|sttjdd}tjtj tj d|D]}t|ddy)zMain program, when run as a script: produce grammar pickle files. Calls load_grammar for each argument, a path to a grammar text file. rNz %(message)s)levelrxformatT)rr)rrargvrM basicConfigINFOstdoutr)rrs r$mainr+sS SXXab\" gll3::mT0Rd$/0 r&__main__r )z Grammar.txtNTFN)1__doc__ __author____all__iorMrrrcollections.abcrr contextlibr dataclassesrr r typingr r r rrblib2to3.pgen2.grammarrblib2to3.pgen2.tokenizerblib2to3.pytreerrRrrrrrrrrr0rrrIrrrrr(exitr+r.r&r$rs 3 ^ $   .%(11*-43 S$ $% ,, ,66rw,w,tdx~#           V     26c6c6d6DH  "% 2:4.  __ 0    z CHHSTV_r&