^/bdZdZddgZddlZddlZddlZddlZddlZddlm Z m Z m Z m Z m Z GddeZd Z dd Zd Zd Zd Zedk(rej,ee yy)zZParser driver. This provides a high-level interface to parse a file into a syntax tree. z#Guido van Rossum Driver load_grammarN)grammarparsetokentokenizepgenc<eZdZddZd dZd dZd dZd dZd dZy) rNcZ||_|tj}||_||_y)N)rlogging getLoggerloggerconvert)selfrrrs ;/opt/alt/python312/lib64/python3.12/lib2to3/pgen2/driver.py__init__zDriver.__init__s* >&&(F  cftj|j|j}|j d}d}dx}x}x}x} } d} |D]H} | \}}}} } |||fk7r:||f|ks J||f|f|\} }|| kr| d| |z zz } | }d}||kr | | ||z } |}|t j t jfvr#| |z } | \}}|jdr|dz }d}|tjk(rtj|}|r/|jjdtj||| |j||| |fr*|r|jjd|j"Sd} | \}}|jdsB|dz }d}Ktj d||| |f) z4Parse a series of tokens and return the syntax tree.rrN z%s %r (prefix=%r)zStop.zincomplete input)rParserrrsetupr COMMENTNLendswithrOPopmaprdebugtok_nameaddtoken ParseErrorrootnode)rtokensrplinenocolumntypevaluestartend line_textprefix quintuples_linenos_columns r parse_tokenszDriver.parse_tokens&s LLt|| 4  1555u5u5sYI1: .D%Y(('50KFF3CU2KK0%*"(H$dh&788F%FFH$ix88F%F(((++66%!$>>$'aKFFuxx}}U+ !!"5"'.."6vGzz$7KK%%g.zzF NFF~~d#! A F""#5#'A Arcdtj|j}|j||Sz*Parse a stream and return the syntax tree.)r generate_tokensreadliner1)rstreamrr$s rparse_stream_rawzDriver.parse_stream_rawVs)))&//:  //rc&|j||Sr3)r7)rr6rs r parse_streamzDriver.parse_stream[s$$VU33rctj|d|5}|j||cdddS#1swYyxYw)z(Parse a file and return the syntax tree.r)encodingN)ioopenr9)rfilenamer<rr6s r parse_filezDriver.parse_file_s0 WWXsX 6&$$VU37 6 6s5>ctjtj|j}|j ||S)z*Parse a string and return the syntax tree.)r r4r=StringIOr5r1)rtextrr$s r parse_stringzDriver.parse_stringds4))"++d*;*D*DE  //r)NN)F)NF) __name__ __module__ __qualname__rr1r7r9r@rDrrrrs!.`0 44 0rctjj|\}}|dk(rd}||zdjt t t jzdzS)Nz.txtr.z.pickle)ospathsplitextjoinmapstrsys version_info)gtheadtails r_generate_pickle_namerVjsP!!"%JD$ v~ $;#c3+;+;"<= = IIrc|tj}| t|n|}|s t||sQ|j d|t j |}|r&|j d| |j||S|Stj}|j||S#t$r}|j d|Yd}~|Sd}~wwxYw)z'Load the grammar (maybe from a pickle).Nz!Generating grammar tables from %szWriting grammar tables to %szWriting failed: %s) r rrV_newerinfor generate_grammardumpOSErrorrGrammarload)rSgpsaveforcerges rrrqs~""$&(j r "bB F2rN 7<  ! !" %  KK6 ; 5r H1H OO  r H  5 0!44 H  5s0B,, C5C  Cctjj|sytjj|sytjj|tjj|k\S)z0Inquire whether file a was written since file b.FT)rKrLexistsgetmtime)abs rrXrXsQ 77>>!  77>>!  77  A "''"2"21"5 55rc tjj|r t|St tjj |}t j||}tj}|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. ) rKrLisfilerrVbasenamepkgutilget_datarr]loads)packagegrammar_source pickled_namedatarbs rload_packaged_grammarrssf ww~~n%N++()9)9.)IJL   G\ 2DAGGDM Hrc|stjdd}tjtjtj 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)levelr6formatT)r`ra)rQargvr basicConfigINFOstdoutr)argsrSs rmainr|sL xx| gll3::,.Rd$/ r__main__)z Grammar.txtNTFN)__doc__ __author____all__r=rKr rlrQrrrrr r objectrrVrrXrsr|rEexitintrHrrrs 3 ^ $  43J0VJ0ZJ'+04 *6 (  z CHHSTV_r