B u `g @snddlmZddlZejjdkr*eefZneZeZ dZ dZ ddZ dZ d Zd Zd d ZeZd ZddZddZddZddZddZddlZddlZddlZddlZedZdddddddd d!d" Zd#d$Z Gd%d&d&e!Z"Gd'd(d(e!Z#e$d)krjddl%m&Z&e&&Z'ddlZe(ej)d*Z*e*+Z,e#e'Z-e-.e,ej)d*x"e-/Z0e0sXPe1e-j2e0qHWdS)+) generatorsN) ZCPP_ID CPP_INTEGERZ CPP_FLOATZ CPP_STRINGZCPP_CHARCPP_WSZ CPP_COMMENT1Z CPP_COMMENT2Z CPP_POUNDZ CPP_DPOUNDz+-*/%|&~^<>=!?()[]{}.,;:\'"cCs|jj|jd7_|S)z\s+ )lexerlinenovaluecount)tr +/tmp/pip-unpacked-wheel-zt_1wjp0/ply/cpp.pyt_CPP_WS!srz\#z\#\#z[A-Za-z_][\w_]*cCs|S)zA(((((0x)|(0X))[0-9a-fA-F]+)|(\d+))([uU][lL]|[lL][uU]|[uU]|[lL])?)r )r r r r r-srz?((\d+)(\.\d+)(e(\+|-)?(\d+))? | (\d+)e(\+|-)?(\d+))([lL]|[fF])?cCs|jj|jd7_|S)z\"([^\\\n]|(\\(.|\n)))*?\"r)rrr r )r r r r t_CPP_STRING7srcCs|jj|jd7_|S)z(L)?\'([^\\\n]|(\\(.|\n)))*?\'r)rrr r )r r r r t_CPP_CHAR=srcCs8|jd}|jj|7_d|_|r.d|nd|_|S)z(/\*(.|\n)*?\*/)rr )r r rrtype)r Zncrr r r t_CPP_COMMENT1Cs  rcCsd|_d|_|S)z (//.*?(\n|$))rr)rr )r r r r t_CPP_COMMENT2LsrcCs(|jd|_|jd|_|jd|S)Nr)r rrskip)r r r r t_errorRs   rz\?\?[=/\'\(\)\!<>\-]#\^[]|{}~) =/'()!<>-cCstdd|S)NcSst|dS)N) _trigraph_repgroup)gr r r |ztrigraph..) _trigraph_patsub)inputr r r trigraph{sr3c@seZdZdddZdS)MacroNFcCs0||_||_||_||_|r&|d|_d|_dS)Nr*)namer arglistvariadicvarargsource)selfr5r r6r7r r r __init__s zMacro.__init__)NF)__name__ __module__ __qualname__r;r r r r r4sr4c@seZdZd&ddZddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ d'ddZ ddZd(ddZddZddZd d!Zdifd"d#Zd$d%ZdS)) PreprocessorNcCsl|dkrtj}||_i|_g|_g|_|t}|dt d||dt d|d|_ dS)Nz __DATE__ "%s"z%b %d %Yz __TIME__ "%s"z%H:%M:%S) lexrmacrospath temp_pathlexprobetime localtimedefinestrftimeparser)r:rtmr r r r;szPreprocessor.__init__cCs4g}|j|x|j}|s"P||qW|S)N)rr2tokenappend)r:texttokenstokr r r tokenizes  zPreprocessor.tokenizecCstd|||fdS)Nz%s:%d %s)print)r:filelinemsgr r r errorszPreprocessor.errorc Cs|jd|j}|r$|jdkr.tdn|j|_|jd|j}|r^t|jdkrhtdn|j|_t|j|_ |jd|j}|r|jdkrtdn|j|_ |jd|j}|r|jdkrd|_ n|j|_ |jd |j}|r|jd krd|_ td n|j|_ |j |j f|_ d d d ddddddg }xB|D]:}|j||j}|r||j|krPtd|qPWdS)N identifierz"Couldn't determine identifier typeZ12345i90zCouldn't determine integer typez "filename"zCouldn't determine string typez rz%Couldn't determine token for newlinesr'r(rz##rr$r%,.z,Unable to lex '%s' required for preprocessor)rr2rKr rQrt_IDint t_INTEGERt_INTEGER_TYPEt_STRINGZt_SPACEZ t_NEWLINEt_WS)r:rOcharscr r r rDsD                  zPreprocessor.lexprobecCs|j|dS)N)rBrL)r:rBr r r add_path szPreprocessor.add_pathccs|j}dd|D}xhtt|D]X}|d}xJ||dr|t|kr||dd||||<d||<|d7}q8Wq*Wd|}||d|_g}x<| }|sP| ||j |j krd|j kr|Vg}qW|r|VdS)NcSsg|] }|qSr )rstrip).0xr r r sz,Preprocessor.group_lines..rrr*r)rclone splitlinesxrangelenendswithjoinr2rrKrLrr^r )r:r2r@linesij current_linerOr r r group_liness,    zPreprocessor.group_linescCs|d}x(|t|kr,||j|jkr,|d7}qW|d|=t|d}x$|dkrh||j|jkrh|d8}qFW||dd=|S)Nrr)rjrr^)r:rNrnr r r tokenstrip:s    zPreprocessor.tokenstripc Csg}g}g}d}t|}d}x$||kr@||j|jkr@|d7}qW||krh||jdkrh||dn ||j|djddggfS|d7}x||krf||}|jdkr|||d7}n|jdkr|d8}|dkr |r||||||d||fS||nD|jdkrR|dkrR|||||dg}n |||d7}qW||j|djddggfS) Nrrr$zMissing '(' in macro argumentsr%rWr*zMissing ')' in macro arguments) rjrr^r rLrUr9rrr) r: tokenlistargs positionsZ current_argZnestingZtokenlenrnr r r r collect_argsVsD            zPreprocessor.collect_argscCs*g|_g|_g|_d}x|t|jkr|j|j|jkrx|j|j|jkrx|j|j|j}|dkr|j|djdkrt |j||j|<|j |j|_|j|d=|j ||dfqn|dkr|j|djdkr|j d||df|j|d=|d8}qn^|dt|jkrd|j|djdkrd|j d||f|j|d=qn|j d||fn|j|jdkr|j r|dkr|j|djdkr|dt|jkr|j|dj|jkr|j|dj|j kr|j |d|d7}qW|jjdd d d dS) Nrrrz##r`erWcSs|dS)Nr )rdr r r r.r/z,Preprocessor.macro_prescan..T)keyreverse)patch str_patchvar_comma_patchrjr rrYr6indexcopyr]rLr7r8sort)r:macrornargnumr r r macro_prescans<(   * (, zPreprocessor.macro_prescanc Cs,dd|jD}i}xb|jD]X\}}||krTdddd||Ddd||<t||||<||||_qWd}|jr|d sx|jD]}d||<d }qWi}xh|jD]^\} }}| d kr|||||d <q| d kr||kr|||||<|||||d <qW|r(dd|D}|S)NcSsg|]}t|qSr )r)rc_xr r r resz2Preprocessor.macro_expand_args..z"%s"rfcSsg|] }|jqSr )r )rcrdr r r resrz\\Fr*Tr`rrwcSsg|] }|r|qSr r )rc_ir r r res) r r|rlreplacerr7r}r{ expand_macros) r:rrtrepZ str_expansionrrnZ comma_patchexpandedptyper r r macro_expand_argss.( zPreprocessor.macro_expand_argscCs|dkr i}d}x|t|kr||}|j|jkr|j|jkr|j|krd||j<|j|j}|js|dd|jD|}x|D] }|j|_qW||||d<|t|7}n|d}x(|t|kr||j|jkr|d7}qW|t|kr||jdkr| ||d\} } } |j snt| t|jkrn| |j |jd|jt|jf|| }q|j rt| t|jdkrt|jdkr| |j |jd |jt|jdfn&| |j |jd |jt|jdf|| }n|j rft| t|jdkr"| gnD||| t|jd|| d| t|jd<| t|jd=||| } || |} x| D]} |j| _qW| |||| <|t| 7}n|d7}||j=qn"|jd kr|j|_||j|_|d7}qW|S) NrTcSsg|]}t|qSr )r)rcrr r r resz.Preprocessor.expand_macros..rr$zMacro %s requires %d argumentsrxz(Macro %s must have at least %d argumentsz'Macro %s must have at least %d argumentZ__LINE__)rjrrYr rAr6rrr^rvr7rUr9rLrr[r\)r:rNrrnr mexrwrotokcountrtrurrr r r rs^     "  (&  4     zPreprocessor.expand_macroscCs`d}x|t|kr$||j|jkr||jdkr|d}d}d}x|t|kr||j|jkrr|d7}qJnn||j|jkr||j|jkrd}nd}|sPn<||jdkrd}n(||jd krPn||j||jd |d7}qJW|j ||_| |||_||d|d=|d7}qW| |}xt |D]\}}|j|jkr|t |||<|j ||_| d||_nd|j|j kr:t |||<t||j||_x2||jd d kr||jdd ||_qWq:Wd dd|D}|dd}|dd}|dd}y t|}Wn0tk rZ||j|djdd}YnX|S)NrZdefinedrFZ0LZ1Lr$Tr%zMalformed defined()r*Z0123456789abcdefABCDEFrfcSsg|]}t|jqSr )strr )rcrdr r r re\sz)Preprocessor.evalexpr..z&&z and z||z or r&z not zCouldn't evaluate expression)rjrrYr r^rArUr9rr[r\r enumeraterrrlreval Exception)r:rNrnroZ needparenresultr exprr r r evalexpr1s^"     $     zPreprocessor.evalexprccst|}||}|sd}|d|||_g}d}d}g}xN|D]D} x"t| D]\} } | j|jkrVPqVW| jdkr~x,| D]$} | j|jkrd| jkr|| qW| | | dd} | r| dj} | | dd}nd} g}| d kr(|r|x| |D] } | VqWg}||q| d kr|r|x| |D] } | VqDWg}|j d }x| |D] } | VqnW||j d <||_q| d kr|r|x| |D] } | VqWg}| |q| d kr|||f|r||dj|j kr d}d}nd}q| dkrT|||f|r||dj|j krLd}d}nd}q| dkr|||f|r|||}|sd}d}nd}n| dkr|r|ddr|rd}n|s||}|rd}d}n||j| djdn| dkrF|r.|ddrD|rd}n|sDd}d}n||j| djdn6| dkr|rd|\}}n||j| djdnqF|rF|| qFWx| |D] } | VqWg}dS)Nrfz __FILE__ "%s"TFrrrrrGincludeZ__FILE__undefZifdefZifndefifelifr*zMisplaced #elifelsezMisplaced #elseendifzMisplaced #endif)r3rqrGr9rrr^r rLrrrrArrrrUrpopextend)r:r2r9r rmchunkenableZ iftriggerZifstackrdrnrOZ dirtokensr5rtZoldfilerr r r parsegenls                        zPreprocessor.parsegenc cs|sdS|r|djdkr4|dj|jkr4||}|djdkrd}x4|t|krn||jdkrdP|d7}qHWtddSddd|d|D}|jdg|j}nB|dj|jkr|djdd }|jdg|j}n td dSx|D]}t j||}y`t |d  }t j |}|r6|j d|x|||D] } | VqDW|rb|jd=PWqtk r|YqXqWtd |dS) Nrr'rr(zMalformed #include <...>rfcSsg|] }|jqSr )r )rcrdr r r resz(Preprocessor.include..r*zMalformed #include statementrzCouldn't find '%s')r rr]rrjrQrlrBrCosopenreaddirnameinsertrIOError) r:rNrnfilenamerBpZinamedataZdnamerOr r r rsF      zPreprocessor.includecCst|tr||}|}y||d}t|dkr:|d}nd}|s^t|jg}||j|j<n6|j|jkrt|j| |dd}||j|j<n|jdkr| |dd\}}}d} x|D]} | rt dPd dd | D} | d kr d } |j | d_d | d_d } | dd=qnb| d dd kr| dj|j krd } | dd=| djd dd kr| djdd | d_qt| dks| dj|j krt dPqW| |d|d} d} x| t| krX| dt| krL| | j|jkr| | djdkr| | =qn0| | jdkrL| | dj|jkrL| | d=| d7} qWt|j| dd |D| }||||j|j<nt dWntk rt dYnXdS)Nrrrxr$Fz0No more arguments may follow a variadic argumentrfcSsg|]}t|jqSr )rr )rcrr r r re:sz'Preprocessor.define..z...TZ __VA_ARGS__zInvalid macro argumentz##cSsg|]}|djqS)r)r )rcrdr r r reXszBad macro definition) isinstance STRING_TYPESrPrjr4r rArr^rrrvrQrlrYr LookupError)r:rNZlinetokr5mtyperrrtrur7aZastrZmvaluernr r r rG sl            $ &&   zPreprocessor.definecCs0|dj}y |j|=Wntk r*YnXdS)Nr)r rAr)r:rNidr r r rfs   zPreprocessor.undefcCs||_||||_dS)N)ignorerrI)r:r2r9rr r r parserszPreprocessor.parsecCsDy$xt|j}|j|jkr|SqWWntk r>d|_dSXdS)N)nextrIrr StopIteration)r:rOr r r rK{s  zPreprocessor.token)N)N)N)r<r=r>r;rPrUrDrarqrrrvrrrrrrrGrrrKr r r r r?s&  < !5,2 H; 1F  r?__main__r)3 __future__rsys version_infomajorrunicoderrangerirNliteralsrZ t_CPP_POUNDZ t_CPP_DPOUNDZt_CPP_IDrZ t_CPP_INTEGERZ t_CPP_FLOATrrrrrrerrEos.pathrcompiler0r+r3objectr4r?r<Zply.lexr@rrargvfrr2rrrKrOrQr9r r r r  sl     j