U `g @slddlmZddlZejjdkr*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)krhddl%m&Z&e&&Z'ddlZe(ej)d*Z*e*+Z,e#e'Z-e-.e,ej)d*e-/Z0e0sXqhe1e-j2e0qFdS)+) 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+ lexerlinenovaluecounttr+/tmp/pip-unpacked-wheel-g1zfoz1i/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])?)rr rrrr-srz?((\d+)(\.\d+)(e(\+|-)?(\d+))? | (\d+)e(\+|-)?(\d+))([lL]|[fF])?cCs|jj|jd7_|S)z\"([^\\\n]|(\\(.|\n)))*?\"rrr rrr t_CPP_STRING7srcCs|jj|jd7_|S)z(L)?\'([^\\\n]|(\\(.|\n)))*?\'rrr rrr t_CPP_CHAR=srcCs8|jd}|jj|7_d|_|r.d|nd|_|S)z(/\*(.|\n)*?\*/)rr )r r rr type)r Zncrrrrt_CPP_COMMENT1Cs  rcCsd|_d|_|S)z (//.*?(\n|$))rr)rr r rrrt_CPP_COMMENT2LsrcCs(|jd|_|jd|_|jd|SNr)r rrskipr rrrt_errorRs   rz\?\?[=/\'\(\)\!<>\-]#\^[]|{}~) =/'()!<>-cCstdd|S)NcSst|dSN) _trigraph_repgroup)grrr|ztrigraph..) _trigraph_patsub)inputrrrtrigraph{sr7c@seZdZdddZdS)MacroNFcCs0||_||_||_||_|r&|d|_d|_dSr-)namer arglistvariadicvarargsource)selfr9r r:r;rrr__init__s zMacro.__init__)NF)__name__ __module__ __qualname__r?rrrrr8sr8c@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>rtmrrrr?szPreprocessor.__init__cCs0g}|j||j}|s q,||q|SN)rr6tokenappend)r>texttokenstokrrrtokenizes   zPreprocessor.tokenizecCstd|||fdS)Nz%s:%d %s)print)r>filelinemsgrrrerrorszPreprocessor.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 }|D]:}|j||j}|rz|j|krNtd|qNdS)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+r##rr'r(,.z,Unable to lex '%s' required for preprocessor)rr6rPr rVrt_IDint t_INTEGERt_INTEGER_TYPEt_STRINGZt_SPACEZ t_NEWLINEt_WS)r>rTcharscrrrrHsD                 zPreprocessor.lexprobecCs|j|dSrO)rFrQ)r>rFrrradd_path szPreprocessor.add_pathccs|j}dd|D}tt|D]T}|d}||dr(|t|kr(||dd||||<d||<|d7}q4q(d|}||d|_g}| }|sq| ||j |j krd|j kr|Vg}q|r|VdS)NcSsg|] }|qSr)rstrip.0xrrr sz,Preprocessor.group_lines..rrr.r)rclone splitlinesxrangelenendswithjoinr6r rPrQrrdr )r>r6rDlinesij current_linerTrrr group_liness*     zPreprocessor.group_linescCstd}|t|kr*||j|jkr*|d7}q|d|=t|d}|dkrb||j|jkrb|d8}q@||dd=|Sr)rqrrd)r>rSrurrr tokenstrip:s    zPreprocessor.tokenstripc Csg}g}g}d}t|}d}||kr>||j|jkr>|d7}q||krd||jdkrd||dn ||j|djddggfS|d7}||kr`||}|jdkr|||d7}n|jdkr|d8}|dkr|r||||||d||fS||nD|jdkrL|dkrL|||||dg}n |||d7}q||j|djddggfS) Nrrr'zMissing '(' in macro argumentsr(r]r.zMissing ')' in macro arguments) rqrrdr rQrZr=r ry) r> tokenlistargs positionsZ current_argZnestingZtokenlenrur rrr collect_argsVsD            zPreprocessor.collect_argscCs$g|_g|_g|_d}|t|jkr |j|j|jkrt|j|j|jkrt|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|jkr`|j|djdkr`|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}q|jjdd d d dS) Nrrrr\rfer]cSs|dS)Nr)rkrrrr2r3z,Preprocessor.macro_prescan..T)keyreverse)patch str_patchvar_comma_patchrqr rr_r:indexcopyrcrQr;r<sort)r>macroruargnumrrr macro_prescansD(   * ( zPreprocessor.macro_prescanc Cs dd|jD}i}|jD]X\}}||krRdddd||Ddd||<t||||<||||_qd}|jr|d s|jD]}d||<d }qi}|jD]^\} }}| d kr|||||d <q| d kr||kr|||||<|||||d <q|rdd|D}|S)NcSsg|]}t|qSrrrj_xrrrrlsz2Preprocessor.macro_expand_args..z"%s"rmcSsg|] }|jqSrr rirrrrlsrz\\Fr.Trfrr~cSsg|] }|r|qSrrrjZ_irrrrls) r rrsreplacerr;rr expand_macros) r>rr{repZ str_expansionrruZ comma_patchexpandedptyperrrmacro_expand_argss.( zPreprocessor.macro_expand_argscCs|dkr i}d}|t|kr||}|j|jkr|j|jkr|j|krd||j<|j|j}|js|dd|jD|}|D] }|j|_q||||d<|t|7}n|d}|t|kr||j|jkr|d7}q|t|kr||jdkr| ||d\} } } |j sbt| t|jkrb| |j |jd|jt|jf|| }q|j rt| t|jdkrt|jdkr| |j |jd |jt|jdfn&| |j |jd |jt|jdf|| }n|j rZt| t|jdkr| gnD||| t|jd|| d| t|jd<| t|jd=||| } || |} | D]} |j| _qv| |||| <|t| 7}n|d7}||j=qn"|jd kr|j|_||j|_|d7}q|S) NrTcSsg|]}t|qSrrrrrrrlsz.Preprocessor.expand_macros..rr'zMacro %s requires %d argumentsrz(Macro %s must have at least %d argumentsz'Macro %s must have at least %d argumentZ__LINE__)rqrr_r rEr:rr rdr}r;rZr=rQrrarb)r>rSrrur mexr~rvtokcountr{r|rrrrrrs^    "  (&  4     zPreprocessor.expand_macroscCsNd}|t|kr||j|jkr||jdkr|d}d}d}|t|kr||j|jkrl|d7}qDnn||j|jkr||j|jkrd}nd}|sqn<||jdkrd}n(||jd krqn||j||jd |d7}qD|j ||_| |||_||d|d=|d7}q| |}t |D]\}}|j|jkrpt |||<|j ||_| d||_n`|j|j kr.t |||<t||j||_||jd d kr.||jdd ||_qq.d dd|D}|dd}|dd}|dd}z t|}Wn0tk rH||j|djdd}YnX|S)NrZdefinedrFZ0LZ1Lr'Tr(zMalformed defined()r.Z0123456789abcdefABCDEFrmcSsg|]}t|jqSrstrr rirrrrl\sz)Preprocessor.evalexpr..z&&z and z||z or r)z not zCouldn't evaluate expression)rqrr_r rdrErZr=r rarbr enumeraterrrsreval Exception)r>rSrurvZ needparenresultr exprrrrevalexpr1s^"            zPreprocessor.evalexprccst|}||}|sd}|d|||_g}d}d}g}|D],} t| D]\} } | j|jkrPqjqP| jdkrb| D]$} | j|jkrzd| jkrz|| qz| | | dd} | r| dj} | | dd}nd} g}| d kr|r`| |D] } | Vqg}||qp| d krz|r`| |D] } | Vq2g}|j d }| |D] } | VqX||j d <||_qp| d kr|r`| |D] } | Vqg}| |qp| d kr|||f|r`|dj|j krd}d}nd}qp| dkr8|||f|r`|dj|j kr0d}d}nd}qp| dkrv|||f|r`||}|spd}d}nd}n| dkr|r|ddr|rd}n|s||}|rd}d}n||j| djdn| dkr*|r|ddr(|rd}n|s(d}d}n||j| djdn6| dkrp|rH|\}}n||j| djdnqB|rB|| qB| |D] } | Vq|g}dS)Nrmz __FILE__ "%s"TFrrrrrKincludeZ__FILE__undefZifdefZifndefifelifr.zMisplaced #elifelsezMisplaced #elseendifzMisplaced #endif)r7rxrKr=rrrdr rQryrrErrrrZr popextend)r>r6r=r rtchunkenableZ iftriggerZifstackrkrurTZ dirtokensr9r{Zoldfilerrrrparsegenls                         zPreprocessor.parsegenc cs|sdS|r|djdkr4|dj|jkr4||}|djdkrd}|t|krl||jdkrbqx|d7}qFtddSddd|d|D}|jdg|j}nB|dj|jkr|djdd }|jdg|j}n td dS|D]}t j||}zbt |d  }t j |}|r0|j d||||D] } | Vq<|rX|jd=WqWqtk rxYqXqtd |dS) Nrr*rr+zMalformed #include <...>rmcSsg|] }|jqSrrrirrrrlsz(Preprocessor.include..r.zMalformed #include statementrzCouldn't find '%s')r rrcrrqrVrsrFrGosopenreaddirnameinsertrIOError) r>rSrufilenamerFpZinamedataZdnamerTrrrrsF      zPreprocessor.includecCst|tr||}|}zz|d}t|dkr:|d}nd}|s^t|jg}||j|j<n4|j|jkrt|j| |dd}||j|j<n|jdkr| |dd\}}}d} |D]} | rt dqd 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 dqq| |d|d} d} | t| krX| dt| krL| | j|jkr| | djdkr| | =qn0| | jdkrL| | dj|jkrL| | d=| d7} qt|j| dd |D| }||||j|j<nt dWntk rt dYnXdS)Nrrrr'Fz0No more arguments may follow a variadic argumentrmcSsg|]}t|jqSrrrrrrrl:sz'Preprocessor.define..z...TZ __VA_ARGS__zInvalid macro argumentr\cSsg|]}|djqS)rrrirrrrlXszBad macro definition) isinstance STRING_TYPESrUrqr8r rErrdryr}rVrsr_r LookupError)r>rSZlinetokr9mtyperrr{r|r;aZastrZmvaluerurrrrK sl           $ &&    zPreprocessor.definecCs0|dj}z |j|=Wntk r*YnXdS)Nr)r rEr)r>rSidrrrrfs   zPreprocessor.undefcCs||_||||_dSrO)ignorerrM)r>r6r=rrrrparserszPreprocessor.parsecCsDz"t|j}|j|jkr|WSqWntk r>d|_YdSXdSrO)nextrMrr StopIteration)r>rTrrrrP{s  zPreprocessor.token)N)N)N)r@rArBr?rUrZrHrgrxryr}rrrrrrrKrrrPrrrrrCs&  < !5,2 H; 1F  rC__main__r)3 __future__rsys version_infomajorrunicoderrangerprSliteralsrZ t_CPP_POUNDZ t_CPP_DPOUNDZt_CPP_IDrZ t_CPP_INTEGERZ t_CPP_FLOATrrrrrrerrIos.pathrcompiler4r/r7objectr8rCr@Zply.lexrDrrargvfrr6rrrPrTrVr=rrrr sl      j