zmc
2023-08-08 e792e9a60d958b93aef96050644f369feb25d61b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
U
L±d‚ã
@s`ddlZejjdkreefZneZeZdZdZ    dd„Z
dZ dZ d    Z d
d „ZeZd Zd d„Zdd„Zdd„Zdd„Zdd„ZddlZddlZddlZddlZe d¡Zddddddddd d!œ    Zd"d#„ZGd$d%„d%eƒZ Gd&d'„d'eƒZ!e"d(kr\ddl#m$Z$e$ $¡Z%ddlZe&ej'd)ƒZ(e( )¡Z*e!e%ƒZ+e+ ,e*ej'd)¡e+ -¡Z.e.sLq\e/e+j0e.ƒq:dS)*éNé)
ZCPP_IDÚ CPP_INTEGERZ    CPP_FLOATZ
CPP_STRINGZCPP_CHARÚCPP_WSZ CPP_COMMENT1Z CPP_COMMENT2Z    CPP_POUNDZ
CPP_DPOUNDz+-*/%|&~^<>=!?()[]{}.,;:\'"cCs|jj|j d¡7_|S)z\s+Ú
©ÚlexerÚlinenoÚvalueÚcount©Út©r úHd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\pycparser/ply/cpp.pyÚt_CPP_WSsrz\#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 rr+srz?((\d+)(\.\d+)(e(\+|-)?(\d+))? | (\d+)e(\+|-)?(\d+))([lL]|[fF])?cCs|jj|j d¡7_|S)z\"([^\\\n]|(\\(.|\n)))*?\"rrr r r rÚ t_CPP_STRING5srcCs|jj|j d¡7_|S)z(L)?\'([^\\\n]|(\\(.|\n)))*?\'rrr r r rÚ
t_CPP_CHAR;srcCs8|j d¡}|jj|7_d|_|r.d|nd|_|S)z(/\*(.|\n)*?\*/)rrú )r    r
rrÚtype)r Zncrr r rÚt_CPP_COMMENT1As
 rcCsd|_d|_|S)z (//.*?(\n|$))rr)rr    r r r rÚt_CPP_COMMENT2JsrcCs(|jd|_|jd|_|j d¡|S©Nré)r    rrÚskipr r r rÚt_errorPs   rz\?\?[=/\'\(\)\!<>\-]ú#ú\ú^ú[ú]ú|Ú{Ú}ú~)    ú=ú/ú'ú(ú)ú!ú<ú>ú-cCst dd„|¡S)NcSst| ¡dS©Néÿÿÿÿ)Ú _trigraph_repÚgroup)Úgr r rÚ<lambda>zóztrigraph.<locals>.<lambda>)Ú _trigraph_patÚsub)Úinputr r rÚtrigraphysr6c@seZdZddd„ZdS)ÚMacroNFcCs0||_||_||_||_|r&|d|_d|_dSr,)Únamer    ÚarglistÚvariadicÚvarargÚsource)Úselfr8r    r9r:r r rÚ__init__s
zMacro.__init__)NF)Ú__name__Ú
__module__Ú __qualname__r>r r r rr7Œsr7c@s¨eZdZd&dd„Zdd„Zdd„Zdd    „Zd
d „Zd d „Zdd„Z    dd„Z
dd„Z dd„Z d'dd„Z dd„Zd(dd„Zdd„Zdd„Zd 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) ÚlexrÚmacrosÚpathÚ    temp_pathÚlexprobeÚtimeÚ    localtimeÚdefineÚstrftimeÚparser)r=rÚtmr r rr>žszPreprocessor.__init__cCs0g}|j |¡|j ¡}|s q,| |¡q|S©N)rr5ÚtokenÚappend)r=ÚtextÚtokensÚtokr r rÚtokenize´s 
 zPreprocessor.tokenizecCstd|||fƒdS)Nz%s:%d %s)Úprint)r=ÚfileÚlineÚmsgr r rÚerrorÃszPreprocessor.errorc    CsŽ|j d¡|j ¡}|r$|jdkr.tdƒn|j|_|j d¡|j ¡}|r^t|jƒdkrhtdƒn|j|_t|jƒ|_    |j d¡|j ¡}|r |jdkrªtdƒn|j|_
|j d¡|j ¡}|rÖ|jdkrÞd|_ n|j|_ |j d    ¡|j ¡}|r|jd    krd|_ td
ƒn|j|_ |j |j f|_ d d d ddddddg    }|D]:}|j |¡|j ¡}|rz|j|krNtd|ƒ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)rr5rOr    rUrÚt_IDÚintÚ    t_INTEGERÚt_INTEGER_TYPEÚt_STRINGZt_SPACEZ    t_NEWLINEÚt_WS)r=rSÚcharsÚcr r rrGÏsD 
 
 
 
 
 
 
 
 
 
zPreprocessor.lexprobecCs|j |¡dSrN)rErP)r=rEr r rÚadd_path szPreprocessor.add_pathccsä|j ¡}dd„| ¡Dƒ}tt|ƒƒD]T}|d}|| d¡r(|t|ƒkr(||dd…||||<d||<|d7}q4q(d |¡}| |¡d|_g}|     ¡}|sªqÖ| 
|¡|j |j krœd|j krœ|Vg}qœ|rà|VdS)NcSsg|] }| ¡‘qSr )Úrstrip©Ú.0Úxr r rÚ
<listcomp>sz,Preprocessor.group_lines.<locals>.<listcomp>rrr-Úr)rÚcloneÚ
splitlinesÚxrangeÚlenÚendswithÚjoinr5rrOrPrrcr    )r=r5rCÚlinesÚiÚjÚ current_linerSr r rÚ group_liness*
 
 
 
zPreprocessor.group_linescCstd}|t|ƒkr*||j|jkr*|d7}q|d|…=t|ƒd}|dkrb||j|jkrb|d8}q@||dd…=|Sr)rprrc)r=rRrtr r rÚ
tokenstrip8s
 
 
zPreprocessor.tokenstripc    Cs€g}g}g}d}t|ƒ}d}||kr>||j|jkr>|d7}q||krd||jdkrd| |d¡n | |j|djd¡dggfS|d7}||kr`||}|jdkr¼| |¡|d7}nš|jdkr|d8}|dkr|rø| | |¡¡| |¡|d||fS| |¡nD|jdkrL|dkrL| | |¡¡| |d¡g}n
| |¡|d7}qŒ| |j|djd¡dggfS)    Nrrr&zMissing '(' in macro argumentsr'r\r-zMissing ')' in macro arguments)    rprrcr    rPrYr<rrx)    r=Ú    tokenlistÚargsÚ    positionsZ current_argZnestingZtokenlenrtr r r rÚ collect_argsTsD
 
 
 
 
 
 
 
 
 
zPreprocessor.collect_argscCsg|_g|_g|_d}|t|jƒkr|j|j|jkrh|j|j|jkrh|j |j|j¡}|dkrÆ|j|djdkrÆt         |j|¡|j|<|j
|j|_|j|d=|j  ||df¡qn |dkr |j|djdkr |j  d||df¡|j|d=qnZ|dt|jƒkrT|j|djdkrT|j  d||f¡|d7}qn|j  d||f¡nŽ|j|jdkrö|j rö|dkrö|j|djdkrö|dt|jƒkrö|j|dj|jkrö|j|dj|j krö|j  |d¡|d7}q|jjdd    „d
d dS) Nrrrr[reÚer\cSs|dS)Nér )rjr r rr1ªr2z,Preprocessor.macro_prescan.<locals>.<lambda>T)ÚkeyÚreverse)ÚpatchÚ    str_patchÚvar_comma_patchrpr    rr^r9ÚindexÚcopyrbrPr:r;Úsort)r=ÚmacrortÚargnumr r rÚ macro_prescan‰sB(   *(ÿÿþ
zPreprocessor.macro_prescanc
Cs dd„|jDƒ}i}|jD]X\}}||krRdd dd„||Dƒ¡ dd¡||<t ||¡||<||||_qd}|jrž|d    sž|jD]}d||<d
}qŒi}|jD]^\}    }}|    d krÐ|||||d …<q¨|    d kr¨||krò| ||¡||<|||||d …<q¨|rdd„|Dƒ}|S)NcSsg|]}t |¡‘qSr ©r…©riÚ_xr r rrk¶sz2Preprocessor.macro_expand_args.<locals>.<listcomp>z"%s"rlcSsg|]
}|j‘qSr ©r    rhr r rrk½srz\\Fr-Trerr}cSsg|] }|r|‘qSr r ©riZ_ir r rrkÙs)    r    r‚rrÚreplacer…r:rƒrÚ expand_macros)
r=r‡rzÚrepZ str_expansionrˆrtZ comma_patchÚexpandedÚptyper r rÚmacro_expand_args´s.(
zPreprocessor.macro_expand_argscCsÐ|dkr i}d}|t|ƒkrÌ||}|j|jkrÂ|j|jkr |j|kr d||j<|j|j}|js´| dd„|jDƒ|¡}|D] }|j|_q†||||d…<|t|ƒ7}nà|d}|t|ƒkrâ||j|jkrâ|d7}q¼||jdkr”|     ||d…¡\}    }
} |j
sTt|
ƒt|jƒkrT|  |j |jd|jt|jƒf¡||    }n@|j
rÜt|
ƒt|jƒdkrÜt|jƒdkr¬|  |j |jd    |jt|jƒdf¡n&|  |j |jd
|jt|jƒdf¡||    }n¸|j
rLt|
ƒt|jƒdkr|
  g¡nD||| t|jƒd||    d…|
t|jƒd<|
t|jƒd…=| ||
¡} | | |¡} | D]} |j| _qh| ||||    …<|t| ƒ7}||j=qn"|jd krÂ|j|_| |j¡|_|d7}q|S) NrTcSsg|]}t |¡‘qSr rŠr‹r r rrkôsz.Preprocessor.expand_macros.<locals>.<listcomp>rr&zMacro %s requires %d argumentsr~z(Macro %s must have at least %d argumentsz'Macro %s must have at least %d argumentZ__LINE__)rprr^r    rDr9rrrcr|r:rYr<rPr”r`ra)r=rRr’rtr ÚmÚexr}ruÚtokcountrzr{r‘Úrr r rræs\
 
 
"  (&
 4     
zPreprocessor.expand_macroscCsNd}|t|ƒkr||j|jkr||jdkr|d}d}d}|t|ƒkrä||j|jkrl|d7}qDnn||j|jkrž||j|jkr’d}nd}|sÚqän<||jdkr²d}n(||jd    krÄqän| |j||jd
¡|d7}qD|j    ||_| 
|¡||_||d|d…=|d7}q|  |¡}t |ƒD]¤\}}|j|jkrpt   |¡||<|j    ||_| 
d¡||_n`|j|j    kr.t   |¡||<t||jƒ||_||jd d kr.||jdd …||_q q.d  dd„|Dƒ¡}| dd¡}| dd¡}| dd¡}z t|ƒ}Wn0tk
rH| |j|djd¡d}YnX|S)NrZdefinedrFZ0LZ1Lr&Tr'zMalformed defined()r-Z0123456789abcdefABCDEFrlcSsg|]}t|jƒ‘qSr ©Ústrr    rhr r rrkSsz)Preprocessor.evalexpr.<locals>.<listcomp>z&&z and z||z or r(z not zCouldn't evaluate expression)rprr^r    rcrDrYr<rr`rarÚ    enumerater…ršrrrÚevalÚ    Exception)r=rRrtruZ    needparenÚresultr Úexprr r rÚevalexpr(s^" 
 
 
      
zPreprocessor.evalexprccs’t|ƒ}| |¡}|sd}| d|¡||_g}d}d}g}|D],}    t|    ƒD]\}
} | j|jkrPqjqP| jdkrb|    D]$} | j|jkrzd| jkrz| | ¡qz|     |    |
dd…¡} | rØ| dj} |     | dd…¡}nd} g}| d    kr|r`| 
|¡D]
} | Vqúg}| |¡qp| d
krz|r`| 
|¡D] } | Vq2g}|j d }|  |¡D] } | VqX||j d <||_qp| d kr´|r`| 
|¡D] } | Vq”g}|  |¡qp| d krö| ||f¡|r`|dj|j krîd}d}nd}qp| dkr8| ||f¡|r`|dj|j kr0d}d}nd}qp| dkrv| ||f¡|r`| |¡}|spd}d}nd}nê| dkrØ|rÀ|ddrÖ|r d}n|sÖ| |¡}|rÖd}d}n| |j| djd¡nˆ| dkr*|r|ddr(|rd}n|s(d}d}n| |j| djd¡n6| dkrp|rH| ¡\}}n| |j| djd¡nqB|rB| |    ¡qB| 
|¡D] } | Vq|g}dS)Nrlz __FILE__ "%s"TFrrrrrJÚincludeZ__FILE__ÚundefZifdefZifndefÚifÚelifr-zMisplaced #elifÚelsezMisplaced #elseÚendifzMisplaced #endif)r6rwrJr<r›rrcr    rPrxrrDr¡r¢r rYrÚpopÚextend)r=r5r<r rsÚchunkÚenableZ    iftriggerZifstackrjrtrSZ    dirtokensr8rzZoldfileržr r rÚparsegencsÄ
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
zPreprocessor.parsegenc
    csŒ|sdS|rê|djdkr4|dj|jkr4| |¡}|djdkr¨d}|t|ƒkrl||jdkrbqx|d7}qFtdƒdSd dd„|d|…Dƒ¡}|jdg|j}nB|dj|jkrÞ|djdd    …}|jdg|j}n td
ƒdS|D]Œ}t    j ||¡}zbt
|d ƒ  ¡}t    j  |¡}|r0|j  d|¡| ||¡D] }    |    Vq<|rX|jd=WqˆWqîtk
rxYqîXqîtd |ƒdS) Nrr)rr*zMalformed #include <...>rlcSsg|]
}|j‘qSr rrhr r rrkøsz(Preprocessor.include.<locals>.<listcomp>r-zMalformed #include statementr˜zCouldn't find '%s')r    rrbrrprUrrrErFÚosÚopenÚreadÚdirnameÚinsertr«ÚIOError)
r=rRrtÚfilenamerEÚpZinameÚdataZdnamerSr r rr¡æsF
 
 
 zPreprocessor.includecCs¸t|tƒr| |¡}|}zz|d}t|ƒdkr:|d}nd}|s^t|jgƒ}||j|j<n4|j|jkr”t|j|     |dd…¡ƒ}||j|j<nþ|jdkrŠ| 
|dd…¡\}}}d}    |D]î}
|    rÖt dƒq’d  dd    „|
Dƒ¡} | d
kr d }    |j |
d_d |
d_d }    |
dd…=qÀnb| d d…d
kr‚|
dj|j kr‚d }    |
dd…=|
djd d…d
krÀ|
djdd …|
d_qÀt|
ƒdks |
dj|j krÀt dƒq’qÀ|     |d|d…¡} d} | t| ƒkrX| dt| ƒkrL| | j|jkr| | djdkr| | =qÊn0| | jdkrL| | dj|jkrL| | d=| d7} qÊt|j| dd    „|Dƒ|    ƒ}| |¡||j|j<nt dƒWntk
r²t dƒYnXdS)Nrrr~r&Fz0No more arguments may follow a variadic argumentrlcSsg|]}t|jƒ‘qSr r™rŽr r rrk1sz'Preprocessor.define.<locals>.<listcomp>z...TZ __VA_ARGS__éýÿÿÿzInvalid macro argumentr[cSsg|]}|dj‘qS)rrrhr r rrkOszBad macro definition)Ú
isinstanceÚ STRING_TYPESrTrpr7r    rDrrcrxr|rUrrr^r‰Ú LookupError)r=rRZlinetokr8Úmtyper•r—rzr{r:ÚaZastrZmvaluertr r rrJsl
 
 
 
 
 
$
&&
 
 zPreprocessor.definecCs0|dj}z |j|=Wntk
r*YnXdS)Nr)r    rDr¸)r=rRÚidr r rr¢]s
 
 zPreprocessor.undefcCs||_| ||¡|_dSrN)Úignorer«rL)r=r5r<r¼r r rÚparseiszPreprocessor.parsecCsDz"t|jƒ}|j|jkr|WSqWntk
r>d|_YdSXdSrN)ÚnextrLrr¼Ú StopIteration)r=rSr r rrOrs
 zPreprocessor.token)N)N)N)r?r@rAr>rTrYrGrfrwrxr|r‰r”rr r«r¡rJr¢r½rOr r r rrBs&
 < !5+2
B;
1F     rBÚ__main__r)1ÚsysÚ version_infoÚmajorršÚunicoder·ÚrangerorRÚliteralsrZ t_CPP_POUNDZ t_CPP_DPOUNDZt_CPP_IDrZ t_CPP_INTEGERZ t_CPP_FLOATrrrrrÚrer…rHÚos.pathr¬Úcompiler3r.r6Úobjectr7rBr?Zply.lexrCrr­ÚargvÚfr®r5r³r½rOrSrUr<r r r rÚ<module>
sj 
    
÷ c