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__FcCs"tj|j|j}|jd}d}d}}}} } d} x|D]} | \}}}} } |||fkr||f|kst||f|f|\} }|| kr| d| |7} | }d}||kr| | ||7} |}|tjtjfkrT| |7} | \}}|j drQ|d7}d}qQ|t j krptj |}|r|j jdt j||| |j||| |fr|r|j jdPd} | \}}|j drQ|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 ZsetupAssertionErrorrCOMMENTNLendswithrOPZopmapr debugtok_nameZaddtokenZ ParseErrorZrootnode)rtokensrplinenocolumntypevaluestartendZ line_textprefixZ quintupleZs_linenoZs_columnrrr parse_tokens&sT  *            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)r0r4rrrrrs 0cCsOtjj|\}}|dkr*d}||djtttjdS)Nz.txtr.z.pickle)ospathsplitextjoinmapstrsys version_info)gtheadtailrrr_generate_pickle_namems rDz 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 rD_newerinfor Zgenerate_grammardumpOSErrorrZGrammarload)rAZgpsaveforcer gerrrrts  &  cCsNtjj|sdStjj|s,dStjj|tjj|kS)z0Inquire whether file a was written since file b.FT)r9r:existsgetmtime)abrrrrEs rEcGsf|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)srJTrK)r?argvr Z basicConfigINFOstdoutr)argsrArrrmains rX__main__)__doc__ __author____all__r+r1r9r r?rrrrrr objectrrDrrErXr5exitintrrrr s       (P