KMaY@sdZdZddgZddlZddlZddlZddlZddlZddlm Z m Z m Z m Z m Z GdddeZd d Zd dd d dddZddZddZedkrejee dS)zZParser driver. This provides a high-level interface to parse a file into a syntax tree. z#Guido van Rossum Driver load_grammarN)grammarparsetokentokenizepgenc@speZdZddddZdddZdddZdd d Zddd d Zdd dZdS)rNcCs7||_|dkr!tj}||_||_dS)N)rlogging getLoggerloggerconvert)selfrr r r9/opt/alt/python35/lib64/python3.5/lib2to3/pgen2/driver.py__init__s     zDriver.__init__FcCstj|j|j}|jd}d}d}}}} } d} x|D]~} | \}}}} } |||fkr|\} }|| kr| d| |7} | }d}||kr| | ||7} |}|tjtjfkr*| |7} | \}}|jdrQ|d7}d}qQ|t j krFtj |}|rl|j j dt j||| |j||| |fr|r|j j dPd} | \}}|jdrQ|d7}d}qQWtjd||| |f|jS) z4Parse a series of tokens and return the syntax tree.rrN z%s %r (prefix=%r)zStop.zincomplete input)rZParserrr ZsetuprCOMMENTNLendswithrOPZopmapr debugtok_nameZaddtokenZ ParseErrorZrootnode)rtokensrplinenocolumntypevaluestartendZ line_textprefixZ quintupleZs_linenoZs_columnrrr parse_tokens&sR              zDriver.parse_tokenscCs"tj|j}|j||S)z*Parse a stream and return the syntax tree.)rgenerate_tokensreadliner#)rstreamrrrrrparse_stream_rawVszDriver.parse_stream_rawcCs|j||S)z*Parse a stream and return the syntax tree.)r')rr&rrrr parse_stream[szDriver.parse_streamc Cs;tj|d|}z|j||SWd|jXdS)z(Parse a file and return the syntax tree.rN)codecsopenr(close)rfilenameencodingrr&rrr parse_file_szDriver.parse_filecCs+tjtj|j}|j||S)z*Parse a string and return the syntax tree.)rr$ioStringIOr%r#)rtextrrrrr parse_stringgszDriver.parse_string) __name__ __module__ __qualname__rr#r'r(r/r3rrrrrs 0cCsOtjj|\}}|dkr*d}||djtttjdS)Nz.txtr.z.pickle)ospathsplitextjoinmapstrsys version_info)gtheadtailrrr_generate_pickle_namems rCz Grammar.txtTFcCs|dkrtj}|dkr0t|n|}|sLt|| r|jd|tj|}|r|jd|y|j|Wqtk r}z|jd|WYdd}~XqXnt j }|j ||S)z'Load the grammar (maybe from a pickle).Nz!Generating grammar tables from %szWriting grammar tables to %szWriting failed: %s) r r rC_newerinfor Zgenerate_grammardumpOSErrorrZGrammarload)r@Zgpsaveforcer gerrrrts  &  cCsNtjj|sdStjj|s,dStjj|tjj|kS)z0Inquire whether file a was written since file b.FT)r8r9existsgetmtime)abrrrrDs rDcGsf|stjdd}tjdtjdtjddx$|D]}t|ddd dqBWdS) zMain program, when run as a script: produce grammar pickle files. Calls load_grammar for each argument, a path to a grammar text file. rNlevelr&formatz %(message)srITrJ)r>argvr Z basicConfigINFOstdoutr)argsr@rrrmains rW__main__)__doc__ __author____all__r*r0r8r r>rrrrrr objectrrCrrDrWr4exitintrrrr s       (P