hyb
2026-01-07 c7f60dc7e9a36596f0e0d1787bd0cca4e9b57bcb
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
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
Ë
IñúhÆ&ãóp—ddlmZddlmZddlmZddlmZmZm    Z    m
Z
ddl m Z m Z e
Gd„de««Zy)    é)Úyacc)Úc_ast)ÚCLexer)Ú    PLYParserÚ
ParseErrorÚ parameterizedÚtemplate)Úfix_switch_casesÚfix_atomic_specifierscó—eZdZdedddddfd„Zd¹d„Zd„Zd    „Zd
„Zd „Z    d „Z
d „Z d„Z d„Z d„Zd„Zd„Zd„Zdºd„Zdºd„Zd„Zd„ZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd „Zd!„Zd"„Z d#„Z!d$„Z"d%„Z#d&„Z$d'„Z%d(„Z&d)„Z'd*„Z(d+„Z)d,„Z*d-„Z+d.„Z,d/„Z-d0„Z.d1„Z/d2„Z0d3„Z1d4„Z2d5„Z3d6„Z4d7„Z5d8„Z6d9„Z7d:„Z8d;„Z9d<„Z:d=„Z;d>„Z<d?„Z=d@„Z>dA„Z?dB„Z@dC„ZAdD„ZBdE„ZCdF„ZDdG„ZEdH„ZFdI„ZGdJ„ZHdK„ZIdL„ZJdM„ZKdN„ZLdO„ZMdP„ZNdQ„ZOdR„ZPdS„ZQdT„ZRdU„ZSdV„ZTdW„ZUdX„ZVdY„ZWeXdZd[d\«d]„«ZYeXdZd[d\«d^„«ZZeXdZd[d\«d_„«Z[eXdZd[«d`„«Z\eXdZd[d\«da„«Z]eXdZd[d\«db„«Z^eXdZd[d\«dc„«Z_eXdZd[d\«dd„«Z`de„Zadf„Zbdg„Zcdh„Zddi„Zedj„Zfdk„Zgdl„Zhdm„Zidn„Zjdo„Zkdp„Zldq„Zmdr„Znds„Zodt„Zpdu„Zqdv„Zrdw„Zsdx„Ztdy„Zudz„Zvd{„Zwd|„Zxd}„Zyd~„Zzd„Z{d€„Z|d„Z}d‚„Z~dƒ„Zd„„Z€d…„Zd†„Z‚d‡„Zƒdˆ„Z„d‰„Z…dŠ„Z†d‹„Z‡dŒ„Zˆd„Z‰dŽ„ZŠd„Z‹d„ZŒd‘„Zd’„ZŽd“„Zd”„Zd•„Z‘d–„Z’d—„Z“d˜„Z”d™„Z•dš„Z–d›„Z—dœ„Z˜d„Z™dž„ZšdŸ„Z›d „Zœd¡„Zd¢„Zžd£„ZŸd¤„Z d¥„Z¡d¦„Z¢d§„Z£d¨„Z¤d©„Z¥dª„Z¦d«„Z§d¬„Z¨d­„Z©d®„Zªd¯„Z«d°„Z¬d±„Z­d²„Z®d³„Z¯d´„Z°dµ„Z±d¶„Z²d·„Z³y¸)»ÚCParserTzpycparser.lextabzpycparser.yacctabFÚcóŽ—||j|j|j|j¬«|_|jj |||¬«|jj |_gd¢}|D]}    |j|    «Œtj|d||||¬«|_    t«g|_ d|_ y)a Create a new CParser.
 
            Some arguments for controlling the debug/optimization
            level of the parser are provided. The defaults are
            tuned for release/performance mode.
            The simple rules for using them are:
            *) When tweaking CParser/CLexer, set these to False
            *) When releasing a stable parser, set to True
 
            lex_optimize:
                Set to False when you're modifying the lexer.
                Otherwise, changes in the lexer won't be used, if
                some lextab.py file exists.
                When releasing with a stable lexer, set to True
                to save the re-generation of the lexer table on
                each run.
 
            lexer:
                Set this parameter to define the lexer to use if
                you're not using the default CLexer.
 
            lextab:
                Points to the lex table that's used for optimized
                mode. Only if you're modifying the lexer and want
                some tests to avoid re-generating the table, make
                this point to a local lex table file (that's been
                earlier generated with lex_optimize=True)
 
            yacc_optimize:
                Set to False when you're modifying the parser.
                Otherwise, changes in the parser won't be used, if
                some parsetab.py file exists.
                When releasing with a stable parser, set to True
                to save the re-generation of the parser table on
                each run.
 
            yacctab:
                Points to the yacc table that's used for optimized
                mode. Only if you're modifying the parser, make
                this point to a local yacc table file
 
            yacc_debug:
                Generate a parser.out file that explains how yacc
                built the parsing table from the grammar.
 
            taboutputdir:
                Set this parameter to control the location of generated
                lextab and yacctab files.
        )Ú
error_funcÚon_lbrace_funcÚon_rbrace_funcÚtype_lookup_func)ÚoptimizeÚlextabÚ    outputdir)Úabstract_declaratorÚassignment_expressionÚdeclaration_listÚdeclaration_specifiers_no_typeÚ designationÚ
expressionÚidentifier_listÚinit_declarator_listÚid_init_declarator_listÚinitializer_listÚparameter_type_listÚblock_item_listÚtype_qualifier_listÚstruct_declarator_listÚtranslation_unit_or_empty)ÚmoduleÚstartÚdebugrÚ    tabmodulerN) Ú_lex_error_funcÚ_lex_on_lbrace_funcÚ_lex_on_rbrace_funcÚ_lex_type_lookup_funcÚclexÚbuildÚtokensÚ_create_opt_rulerÚcparserÚdictÚ _scope_stackÚ_last_yielded_token)
ÚselfÚ lex_optimizeÚlexerrÚ yacc_optimizeÚyacctabÚ
yacc_debugÚ taboutputdirÚrules_with_optÚrules
          úEH:\Change_password\venv_build\Lib\site-packages\pycparser/c_parser.pyÚ__init__zCParser.__init__sʀñtØ×+Ñ+Ø×3Ñ3Ø×3Ñ3Ø!×7Ñ7ô    9ˆŒ    ð          ‰    ‰Ø!ØØ"ð    ô    $ð—i‘i×&Ñ&ˆŒ ò
ˆð"#ò    (ˆDØ × !Ñ ! $Õ 'ð    (ô—y‘yØØ-ØØ"ØØ"ô $ˆŒ ô "›V˜HˆÔð$(ˆÕ ócó֗||j_|jj«t«g|_d|_|j j||j|¬«S)a  Parses C code and returns an AST.
 
            text:
                A string containing the C source code
 
            filename:
                Name of the file being parsed (for meaningful
                error messages)
 
            debug:
                Debug flag to YACC
        N)Úinputr8r()r.ÚfilenameÚ reset_linenor3r4r5r2Úparse)r6ÚtextrDr(s    r?rFz CParser.parse‚s]€ð&ˆ    ‰    ÔØ     ‰    ×ÑÔ Ü!›V˜HˆÔØ#'ˆÔ Ø|‰|×!Ñ!ØØ—i‘iØð"óð    rAcóJ—|jjt««y©N)r4Úappendr3©r6s r?Ú _push_scopezCParser._push_scopešs€Ø ×Ñ× Ñ ¤£Õ(rAcól—t|j«dkDsJ‚|jj«y)Nr)Úlenr4ÚpoprKs r?Ú
_pop_scopezCParser._pop_scopes-€Ü4×$Ñ$Ó%¨Ò)Ð)Ð)Ø ×Ñ×ÑÕrAcó—|jdj|d«s|jd|z|«d|jd|<y)zC Add a new typedef name (ie a TYPEID) to the current scope
        éÿÿÿÿTz;Typedef %r previously declared as non-typedef in this scopeN©r4ÚgetÚ _parse_error©r6ÚnameÚcoords   r?Ú_add_typedef_namezCParser._add_typedef_name¡sT€ð× Ñ  Ñ$×(Ñ(¨¨tÔ4Ø × Ñ ð Ø"&ñ'Ø(-ô /ð'+ˆ×ј"јdÒ#rAcó—|jdj|d«r|jd|z|«d|jd|<y)ze Add a new object, function, or enum member name (ie an ID) to the
            current scope
        rRFz;Non-typedef %r previously declared as typedef in this scopeNrSrVs   r?Ú_add_identifierzCParser._add_identifierªsT€ð × Ñ ˜RÑ  × $Ñ $ T¨5Ô 1Ø × Ñ ð Ø"&ñ'Ø(-ô /ð',ˆ×ј"јdÒ#rAcóf—t|j«D]}|j|«}|€Œ|cSy)z8 Is *name* a typedef-name in the current scope?
        F)Úreversedr4rT)r6rWÚscopeÚin_scopes    r?Ú_is_type_in_scopezCParser._is_type_in_scope´s<€ô˜d×/Ñ/Ó0ò    5ˆEð—y‘y “ˆHØÑ#¨H¢_ð        5ð
rAcóH—|j||j||««yrI)rUÚ_coord)r6ÚmsgÚlineÚcolumns    r?r*zCParser._lex_error_func¾s€Ø ×ј#˜tŸ{™{¨4°Ó8Õ9rAcó$—|j«yrI)rLrKs r?r+zCParser._lex_on_lbrace_funcÁs€Ø ×ÑÕrAcó$—|j«yrI)rPrKs r?r,zCParser._lex_on_rbrace_funcÄs €Ø ‰ÕrAcó(—|j|«}|S)z§ Looks up types that were previously defined with
            typedef.
            Passed to the lexer for recognizing identifiers that
            are types.
        )r`)r6rWÚis_types   r?r-zCParser._lex_type_lookup_funcÇs€ð ×(Ñ(¨Ó.ˆØˆrAcó.—|jjS)z§ We need access to yacc's lookahead token in certain cases.
            This is the last token yacc requested from the lexer, so we
            ask the lexer.
        )r.Ú
last_tokenrKs r?Ú_get_yacc_lookahead_tokenz!CParser._get_yacc_lookahead_tokenÐs€ð
y‰y×#Ñ#Ð#rAcó|—|}|}|jr|j}|jrŒt|tj«r    ||_|S|}t|jtj«s1|j}t|jtj«sŒ1|j|_||_|S)z  Tacks a type modifier on a declarator, and returns
            the modified declarator.
 
            Note: the declarator and modifier may be modified
        )ÚtypeÚ
isinstancerÚTypeDecl)r6ÚdeclÚmodifierÚ modifier_headÚ modifier_tailÚ    decl_tails      r?Ú_type_modify_declzCParser._type_modify_declùsœ€ð!ˆ Ø ˆ ð× Ò Ø)×.Ñ.ˆMð× Ó ô dœEŸN™NÔ +Ø!%ˆMÔ ØˆOð
ˆIä  §¡´·±Ô@Ø%ŸN™N    ô! §¡´·±Õ@ð"+§¡ˆMÔ Ø*ˆIŒN؈KrAcóú—|}t|tj«s'|j}t|tj«sŒ'|j|_|j dd|_|D]R}t|tj«rŒt|«dkDr|jd|j«ŒI||_|cS|sit|jtj«s|jd|j«tjdg|j¬«|_|Stj|Dcgc]}|jD]}|‘ŒŒc}}|dj¬«|_|Scc}}w)z- Fixes a declaration. Modifies decl.
        Nrz Invalid multiple types specifiedzMissing type in declarationÚint©rXé) rorrprnÚdeclnamerWÚqualsÚIdentifierTyperNrUrXÚFuncDeclÚnames)r6rqÚtypenamernÚtnÚidrWs       r?Ú_fix_decl_name_typezCParser._fix_decl_name_type+s@€ð
ˆÜ˜T¤5§>¡>Ô2Ø—9‘9ˆDô˜T¤5§>¡>Õ2ð—M‘MˆŒ    Ø—Z‘Z¡]ˆŒ
ðò     ˆBܘb¤%×"6Ñ"6Õ7ܐx“= 1Ò$Ø×%Ñ%Ø:¸B¿H¹HõFð!#D”IØ’Kð     ñô˜dŸi™i¬¯©Ô8Ø×!Ñ!Ø5°t·z±zôCä×,Ñ,ؐGØŸ*™*ô&ˆDŒIðˆ ô×,Ñ,Ø (×>˜"°R·X±XÒ>¨T’Ð>Ó>ؘq‘k×'Ñ'ô)ˆDŒIðˆ ùó?sÄ?E7
cóˆ—|xstggggg¬«}|r||j|«|S||jd|«|S)a¿ Declaration specifiers are represented by a dictionary
            with the entries:
            * qual: a list of type qualifiers
            * storage: a list of storage type qualifiers
            * type: a list of type specifiers
            * function: a list of function specifiers
            * alignment: a list of alignment specifiers
 
            This method is given a declaration specifier, and a
            new specifier of a given kind.
            If `append` is True, the new specifier is added to the end of
            the specifiers list, otherwise it's added at the beginning.
            Returns the declaration specifier, with the new
            specifier incorporated.
        )ÚqualÚstoragernÚfunctionÚ    alignmentrz)r3rJÚinsert)r6ÚdeclspecÚnewspecÚkindrJÚspecs      r?Ú_add_declaration_specifierz"CParser._add_declaration_specifierWsS€ð ÒXœ4 R°¸"ÀrÐUWÔXˆá Ø ‰J× Ñ ˜gÔ &ðˆ 𠐉J× Ñ ˜a Ô )àˆ rAc ón—d|dv}g}|djd«n£|dd€Øt|d«dksBt|dd    j«d
k7s$|j|dd    jd«s8d }|dD]}t    |d «sŒ|j
}n|j d |«tj|dd    jddd|d|dd    j
¬«|dd<|dd    =nÃt|ddtjtjtjtjf«su|dd}t|tj«s'|j}t|tj«sŒ'|j€ |dd    jd|_|dd    =|D]l}    |    d€J‚|r1tj d|d|d|    d|    dj
¬«}
nXtj"d|d|d|d|d|    d|    jd«|    jd«|    dj
¬«    }
t|
jtjtjtjtjf«r|
} n|j%|
|d«} |rO|r'|j'| j(| j
«n&|j+| j(| j
«t-| «} |j/| «Œo|S)zÿ Builds a list of declarations all sharing the given specifiers.
            If typedef_namespace is true, each declared name is added
            to the "typedef namespace", which also includes objects,
            functions, and enum constants.
        Útypedefr†rzÚbitsizeNrqrnérRrú?rXzInvalid declarationrˆ©r{rnr|ÚalignrXr…)rWr|r†rnrXr‡Úinit©    rWr|r•r†Úfuncspecrnr–r‘rX)rTrNrr`ÚhasattrrXrUrrproÚEnumÚStructÚUnionr}rnr{ÚTypedefÚDeclrƒrYrWr[r rJ) r6rÚdeclsÚtypedef_namespaceÚ
is_typedefÚ declarationsrXÚtÚ decls_0_tailrqÚ declarationÚ
fixed_decls             r?Ú_build_declarationszCParser._build_declarationsps/€ð  $ y¡/Ð1ˆ
؈ 𠐉8<‰<˜    Ó "Ð .Ù ð 1‰XfÑ Ð %ܐ4˜‘<Ó  1Ò$¬¨D°©L¸Ñ,<×,BÑ,BÓ(CÀqÒ(HØ×.Ñ.¨t°F©|¸BÑ/?×/EÑ/EÀaÑ/HÔIؘؐf™òAܘq 'Õ*Ø !§¡˜Ùðð×!Ñ!Ð"7¸Ô?ô %Ÿ~™~ؘf™ bÑ)×/Ñ/°Ñ2ØØØ˜;Ñ'ؘ6‘l 2Ñ&×,Ñ,ô  .ˆE!‰HVÑ ðV‘ ˜RÑ ô˜E !™H VÑ,Ü—
‘
œEŸL™L¬%¯+©+´u×7KÑ7Kð/MôNà  ™8 FÑ+ˆLÜ  ¬u¯~©~Ô>Ø+×0Ñ0 ô! ¬u¯~©~Õ>à×$Ñ$Ð,Ø(,¨V© °RÑ(8×(>Ñ(>¸qÑ(A Ô%ؘ‘L Ð$àó%    ,ˆDؘ‘<Ð+Ð +Ð+ÙÜ#Ÿm™mØØ˜v™,Ø  ™Oؘf™Ø˜v™,×,Ñ,ô .‘ ô$Ÿj™jØØ˜v™,ؘ{Ñ+Ø  ™OØ! *Ñ-ؘf™ØŸ™ &Ó)Ø ŸH™H YÓ/ؘv™,×,Ñ,ô    . ô˜+×*Ñ*Ü—J‘J¤§ ¡ ¬e¯k©kÜ×(Ñ(ð-*ô+ð)‘
à!×5Ñ5°kÀ4ÈÁ<ÓP
ñ!ÙØ×*Ñ*¨:¯?©?¸J×<LÑ<LÕMà×(Ñ(¨¯©¸*×:JÑ:JÔKä.¨zÓ:ˆJØ × Ñ  
Ö +ðK%    ,ðNÐrAcóԗd|dvr|jd|j«|j|t|d¬«gd¬«d}t    j
||||j¬    «S)
z' Builds a function definition.
        rr†zInvalid typedefN©rqr–T©rrŸr rz)rqÚ param_declsÚbodyrX)rUrXr§r3rÚFuncDef)r6rrqr«r¬r¥s      r?Ú_build_function_definitionz"CParser._build_function_definitionÉsz€ð ˜˜Y™Ñ 'Ø × Ñ Ð/°·±Ô <à×.Ñ.ØÜ˜T¨Ô-Ð.Ø"ð/ó$ð%&ñ'ˆ ô
}‰}ØØ#ØØ—*‘*ô    ð    rAcóL—|dk(rtjStjS)z` Given a token (either STRUCT or UNION), selects the
            appropriate AST class.
        Ústruct)rr›rœ)r6Útokens  r?Ú_select_struct_union_classz"CParser._select_struct_union_classÚs €ð HÒ Ü—<‘<Ð ä—;‘;Ð rA)
)ÚleftÚLOR)r³ÚLAND)r³ÚOR)r³ÚXOR)r³ÚAND)r³ÚEQÚNE)r³ÚGTÚGEÚLTÚLE)r³ÚRSHIFTÚLSHIFT)r³ÚPLUSÚMINUS)r³ÚTIMESÚDIVIDEÚMODcóv—|d€tjg«|d<ytj|d«|d<y)zh translation_unit_or_empty   : translation_unit
                                        | empty
        rNrz)rÚFileAST©r6Úps  r?Úp_translation_unit_or_emptyz#CParser.p_translation_unit_or_emptyüs5€ð ˆQ‰4ˆ<Ü—=‘= Ó$ˆAˆaŠDä—=‘=  1¡Ó&ˆAˆaŠDrAcó—|d|d<y)z4 translation_unit    : external_declaration
        rrzN©rÈs  r?Úp_translation_unit_1zCParser.p_translation_unit_1ó€ð‰tˆˆ!ŠrAcóB—|dj|d«|d|d<y)zE translation_unit    : translation_unit external_declaration
        rr’rzN)ÚextendrÈs  r?Úp_translation_unit_2zCParser.p_translation_unit_2 s%€ð    
ˆ!‰ ‰ Aa‘DÔØ‰tˆˆ!ŠrAcó—|dg|d<y)z7 external_declaration    : function_definition
        rrzNrÌrÈs  r?Úp_external_declaration_1z CParser.p_external_declaration_1ó€ð!‘ˆvˆˆ!ŠrAcó—|d|d<y)z/ external_declaration    : declaration
        rrzNrÌrÈs  r?Úp_external_declaration_2z CParser.p_external_declaration_2ó€ð‰tˆˆ!ŠrAcó—|dg|d<y)zi external_declaration    : pp_directive
                                    | pppragma_directive
        rrzNrÌrÈs  r?Úp_external_declaration_3z CParser.p_external_declaration_3s€ð!‘ˆvˆˆ!ŠrAcó—g|d<y)z( external_declaration    : SEMI
        rzNrÌrÈs  r?Úp_external_declaration_4z CParser.p_external_declaration_4%s €ðˆˆ!ŠrAcó—|d|d<y)z1 external_declaration    : static_assert
        rrzNrÌrÈs  r?Úp_external_declaration_5z CParser.p_external_declaration_5*r×rAcóà—t|«dk(r/tj|dd|j|d««g|d<ytj|d|d|j|d««g|d<y)zÈ static_assert           : _STATIC_ASSERT LPAREN constant_expression COMMA unified_string_literal RPAREN
                                    | _STATIC_ASSERT LPAREN constant_expression RPAREN
        ééNrrz)rNrÚ StaticAssertÚ _token_coordrÈs  r?Úp_static_assert_declarationz#CParser.p_static_assert_declaration/sk€ô ˆq‹6QŠ;Ü×&Ñ& q¨¡t¨T°4×3DÑ3DÀQÈÓ3JÓKÐLˆAˆaŠDä×&Ñ& q¨¡t¨Q¨q©T°4×3DÑ3DÀQÈÓ3JÓKÐLˆAˆaŠDrAcóH—|jd|j|d««y)z  pp_directive  : PPHASH
        zDirectives not supported yetrN)rUrârÈs  r?Úp_pp_directivezCParser.p_pp_directive8s%€ð     ×ÑÐ8Ø×+Ñ+¨A¨qÓ1õ    3rAcóB—t|«dk(r-tj|d|j|d««|d<yt|«dk(r-tj|d|j|d««|d<ytjd|j|d««|d<y)zº pppragma_directive      : PPPRAGMA
                                    | PPPRAGMA PPPRAGMASTR
                                    | _PRAGMA LPAREN unified_string_literal RPAREN
        rßràr’rzrrN)rNrÚPragmarârÈs  r?Úp_pppragma_directivezCParser.p_pppragma_directiveCs…€ô
ˆq‹6QŠ;Ü—<‘<  !¡ d×&7Ñ&7¸¸1Ó&=Ó>ˆAˆaŠDÜ ‹VqŠ[Ü—<‘<  !¡ d×&7Ñ&7¸¸1Ó&=Ó>ˆAˆaŠDä—<‘<  D×$5Ñ$5°a¸Ó$;Ó<ˆAˆaŠDrAcóR—t|«dk(r
|dg|d<y|d|dgz|d<y)z‡ pppragma_directive_list : pppragma_directive
                                    | pppragma_directive_list pppragma_directive
        r’rrzN©rNrÈs  r?Úp_pppragma_directive_listz!CParser.p_pppragma_directive_listOó3€ô˜Q› 1š!‘ˆvˆˆ!Ѝ!¨A©$°!°A±$°©-ˆˆ!ŠrAc ó´—tgggtjdg|j|d«¬«gg¬«}|j    ||d|d|d¬«|d<y    )
zU function_definition : id_declarator declaration_list_opt compound_statement
        rxrry©r…rˆr†rnr‡r’rà©rrqr«r¬rzN)r3rr}râr®©r6rÉrs   r?Úp_function_definition_1zCParser.p_function_definition_1Wsv€ôØØØÜ×&Ñ&¨ wØ-1×->Ñ->¸qÀ!Ó-DôFðGàô ˆð×.Ñ.ØØ1‘ؘ!™Ø1‘ð    /óˆˆ!ŠrAcóP—|d}|j||d|d|d¬«|d<y)zl function_definition : declaration_specifiers id_declarator declaration_list_opt compound_statement
        rr’ràérïrzN)r®rðs   r?Úp_function_definition_2zCParser.p_function_definition_2is>€ð‰tˆà×.Ñ.ØØ1‘ؘ!™Ø1‘ð    /óˆˆ!ŠrAcó—|d|d<y)a_ statement   : labeled_statement
                        | expression_statement
                        | compound_statement
                        | selection_statement
                        | iteration_statement
                        | jump_statement
                        | pppragma_directive
                        | static_assert
        rrzNrÌrÈs  r?Ú p_statementzCParser.p_statementxs€ð‰tˆˆ!ŠrAcóš—t|«dk(r5tj|d|dgz|j|d«¬«|d<y|d|d<y)z} pragmacomp_or_statement     : pppragma_directive_list statement
                                        | statement
        ràrr’©Ú block_itemsrXrzN)rNrÚCompoundrârÈs  r?Úp_pragmacomp_or_statementz!CParser.p_pragmacomp_or_statement¯sQ€ô ˆq‹6QŠ;Ü—>‘>ؘa™D ! A¡$ ™KØ×'Ñ'¨¨1Ó-ô/ˆAˆaŠDðQ‘4ˆAˆaŠDrAc ó¬—|d}|d€®|d}tjtjtjf}t    |«dk(rKt |d|«r<tj d|d|d|d|d    |ddd|dj¬
«    g}n8|j|tdd¬ «gd ¬ «}n|j||dd ¬ «}||d<y)z˜ decl_body : declaration_specifiers init_declarator_list_opt
                      | declaration_specifiers_no_type id_init_declarator_list_opt
        rr’Nrnrzr…rˆr†r‡r—r©Trª)
rr›rœršrNroržrXr§r3)r6rÉrÚtyÚs_u_or_erŸs      r?Ú p_decl_bodyzCParser.p_decl_bodyÃsø€ð‰tˆð ˆQ‰4ˆ<ð
f‘ˆBÜŸ ™ ¤e§k¡k´5·:±:Ð>ˆHܐ2‹w˜!Š|¤
¨2¨a©5°(Ô ;ÜŸ™ØØ˜v™,ؘ{Ñ+Ø  ™OØ! *Ñ-ؘA™ØØ Ø˜Q™%Ÿ+™+ô    'ð    (‘ð"×0Ñ0ØÜ T°Ô5Ð6Ø&*ð1ó,‘ð ×,Ñ,ØØ˜‘dØ"&ð-ó(ˆEð
ˆˆ!ŠrAcó—|d|d<y)z& declaration : decl_body SEMI
        rrzNrÌrÈs  r?Ú p_declarationzCParser.p_declarationr×rAcóN—t|«dk(r    |d|d<y|d|dz|d<y)zj declaration_list    : declaration
                                | declaration_list declaration
        r’rrzNrêrÈs  r?Úp_declaration_listzCParser.p_declaration_list    s/€ô˜1“v ’{ˆq‰tˆˆ!Ѝ¨!©¨q°©t© ˆˆ!ŠrAcó<—|j|d|dd«|d<y)z] declaration_specifiers_no_type  : type_qualifier declaration_specifiers_no_type_opt
        r’rr…rzN©rŽrÈs  r?Ú"p_declaration_specifiers_no_type_1z*CParser.p_declaration_specifiers_no_type_1ó$€ð×.Ñ.¨q°©t°Q°q±T¸6ÓBˆˆ!ŠrAcó<—|j|d|dd«|d<y)zf declaration_specifiers_no_type  : storage_class_specifier declaration_specifiers_no_type_opt
        r’rr†rzNrrÈs  r?Ú"p_declaration_specifiers_no_type_2z*CParser.p_declaration_specifiers_no_type_2s$€ð×.Ñ.¨q°©t°Q°q±T¸9ÓEˆˆ!ŠrAcó<—|j|d|dd«|d<y)za declaration_specifiers_no_type  : function_specifier declaration_specifiers_no_type_opt
        r’rr‡rzNrrÈs  r?Ú"p_declaration_specifiers_no_type_3z*CParser.p_declaration_specifiers_no_type_3s$€ð×.Ñ.¨q°©t°Q°q±T¸:ÓFˆˆ!ŠrAcó<—|j|d|dd«|d<y)z_ declaration_specifiers_no_type  : atomic_specifier declaration_specifiers_no_type_opt
        r’rrnrzNrrÈs  r?Ú"p_declaration_specifiers_no_type_4z*CParser.p_declaration_specifiers_no_type_4%rrAcó<—|j|d|dd«|d<y)zb declaration_specifiers_no_type  : alignment_specifier declaration_specifiers_no_type_opt
        r’rrˆrzNrrÈs  r?Ú"p_declaration_specifiers_no_type_5z*CParser.p_declaration_specifiers_no_type_5*ó$€ð×.Ñ.¨q°©t°Q°q±T¸;ÓGˆˆ!ŠrAcó@—|j|d|ddd¬«|d<y)zI declaration_specifiers  : declaration_specifiers type_qualifier
        rr’r…T©rJrzNrrÈs  r?Úp_declaration_specifiers_1z"CParser.p_declaration_specifiers_1/ó)€ð×.Ñ.¨q°©t°Q°q±T¸6È$Ð.ÓOˆˆ!ŠrAcó@—|j|d|ddd¬«|d<y)zR declaration_specifiers  : declaration_specifiers storage_class_specifier
        rr’r†TrrzNrrÈs  r?Úp_declaration_specifiers_2z"CParser.p_declaration_specifiers_24s)€ð×.Ñ.¨q°©t°Q°q±T¸9ÈTÐ.ÓRˆˆ!ŠrAcó@—|j|d|ddd¬«|d<y)zM declaration_specifiers  : declaration_specifiers function_specifier
        rr’r‡TrrzNrrÈs  r?Úp_declaration_specifiers_3z"CParser.p_declaration_specifiers_39s)€ð×.Ñ.¨q°©t°Q°q±T¸:ÈdÐ.ÓSˆˆ!ŠrAcó@—|j|d|ddd¬«|d<y)zS declaration_specifiers  : declaration_specifiers type_specifier_no_typeid
        rr’rnTrrzNrrÈs  r?Úp_declaration_specifiers_4z"CParser.p_declaration_specifiers_4>rrAcó6—|jd|dd«|d<y)z2 declaration_specifiers  : type_specifier
        NrrnrzrrÈs  r?Úp_declaration_specifiers_5z"CParser.p_declaration_specifiers_5Có €ð×.Ñ.¨t°Q°q±T¸6ÓBˆˆ!ŠrAcó@—|j|d|ddd¬«|d<y)zQ declaration_specifiers  : declaration_specifiers_no_type type_specifier
        rr’rnTrrzNrrÈs  r?Úp_declaration_specifiers_6z"CParser.p_declaration_specifiers_6HrrAcó@—|j|d|ddd¬«|d<y)zN declaration_specifiers  : declaration_specifiers alignment_specifier
        rr’rˆTrrzNrrÈs  r?Úp_declaration_specifiers_7z"CParser.p_declaration_specifiers_7Ms)€ð×.Ñ.¨q°©t°Q°q±T¸;ÈtÐ.ÓTˆˆ!ŠrAcó—|d|d<y)a storage_class_specifier : AUTO
                                    | REGISTER
                                    | STATIC
                                    | EXTERN
                                    | TYPEDEF
                                    | _THREAD_LOCAL
        rrzNrÌrÈs  r?Úp_storage_class_specifierz!CParser.p_storage_class_specifierRó€ð‰tˆˆ!ŠrAcó—|d|d<y)zR function_specifier  : INLINE
                                | _NORETURN
        rrzNrÌrÈs  r?Úp_function_specifierzCParser.p_function_specifier\rÎrAcó`—tj|dg|j|d«¬«|d<y)a+ type_specifier_no_typeid  : VOID
                                      | _BOOL
                                      | CHAR
                                      | SHORT
                                      | INT
                                      | LONG
                                      | FLOAT
                                      | DOUBLE
                                      | _COMPLEX
                                      | SIGNED
                                      | UNSIGNED
                                      | __INT128
        rryrzN©rr}rârÈs  r?Úp_type_specifier_no_typeidz"CParser.p_type_specifier_no_typeidbs-€ô×#Ñ# Q q¡T F°$×2CÑ2CÀAÀqÓ2IÔJˆˆ!ŠrAcó—|d|d<y)zó type_specifier  : typedef_name
                            | enum_specifier
                            | struct_or_union_specifier
                            | type_specifier_no_typeid
                            | atomic_specifier
        rrzNrÌrÈs  r?Úp_type_specifierzCParser.p_type_specifierrs€ð‰tˆˆ!ŠrAcóN—|d}|jjd«||d<y)z= atomic_specifier  : _ATOMIC LPAREN type_name RPAREN
        ràÚ_AtomicrzN)r|rJ)r6rÉÚtyps   r?Úp_atomic_specifierzCParser.p_atomic_specifier|s(€ð‰dˆØ     ‰    ×јÔ#؈ˆ!ŠrAcó—|d|d<y)z• type_qualifier  : CONST
                            | RESTRICT
                            | VOLATILE
                            | _ATOMIC
        rrzNrÌrÈs  r?Úp_type_qualifierzCParser.p_type_qualifierƒs€ð ‰tˆˆ!ŠrAcóR—t|«dk(r|d|dgz|d<y|dg|d<y)z„ init_declarator_list    : init_declarator
                                    | init_declarator_list COMMA init_declarator
        rórràrzNrêrÈs  r?Úp_init_declarator_listzCParser.p_init_declarator_list‹ó3€ô!$ A£¨!¢ ˆq‰tq˜‘tf‰}ˆˆ!а!°A±$°ˆˆ!ŠrAcóP—t|dt|«dkDr|dnd¬«|d<y)zb init_declarator : declarator
                            | declarator EQUALS initializer
        rr’ràNr©rz©r3rNrÈs  r?Úp_init_declaratorzCParser.p_init_declarator”ó(€ô˜˜1™¬S°«V°aªZ Q q¢T¸TÔCˆˆ!ŠrAcóR—t|«dk(r|d|dgz|d<y|dg|d<y)z id_init_declarator_list    : id_init_declarator
                                       | id_init_declarator_list COMMA init_declarator
        rórràrzNrêrÈs  r?Úp_id_init_declarator_listz!CParser.p_id_init_declarator_listšr4rAcóP—t|dt|«dkDr|dnd¬«|d<y)zn id_init_declarator : id_declarator
                               | id_declarator EQUALS initializer
        rr’ràNr©rzr6rÈs  r?Úp_id_init_declaratorzCParser.p_id_init_declarator r8rAcó@—|j|d|ddd¬«|d<y)zY specifier_qualifier_list    : specifier_qualifier_list type_specifier_no_typeid
        rr’rnTrrzNrrÈs  r?Úp_specifier_qualifier_list_1z$CParser.p_specifier_qualifier_list_1¨rrAcó@—|j|d|ddd¬«|d<y)zO specifier_qualifier_list    : specifier_qualifier_list type_qualifier
        rr’r…TrrzNrrÈs  r?Úp_specifier_qualifier_list_2z$CParser.p_specifier_qualifier_list_2­rrAcó6—|jd|dd«|d<y)z4 specifier_qualifier_list  : type_specifier
        NrrnrzrrÈs  r?Úp_specifier_qualifier_list_3z$CParser.p_specifier_qualifier_list_3²rrAcó8—t|dgg|dgg¬«|d<y)zH specifier_qualifier_list  : type_qualifier_list type_specifier
        rr’rîrzN©r3rÈs  r?Úp_specifier_qualifier_list_4z$CParser.p_specifier_qualifier_list_4·s$€ô˜˜1™¨°R¸qÀ¹t¸fÈrÔRˆˆ!ŠrAcó2—tg|dgggg¬«|d<y)z9 specifier_qualifier_list  : alignment_specifier
        rrîrzNrDrÈs  r?Úp_specifier_qualifier_list_5z$CParser.p_specifier_qualifier_list_5¼s €ô˜¨¨!© v°rÀÈRÔPˆˆ!ŠrAcó<—|j|d|dd«|d<y)zR specifier_qualifier_list  : specifier_qualifier_list alignment_specifier
        rr’rˆrzNrrÈs  r?Úp_specifier_qualifier_list_6z$CParser.p_specifier_qualifier_list_6ÁrrAcón—|j|d«}||dd|j|d«¬«|d<y)z{ struct_or_union_specifier   : struct_or_union ID
                                        | struct_or_union TYPEID
        rr’N©rWrŸrXrz)r²râ©r6rÉÚklasss   r?Úp_struct_or_union_specifier_1z%CParser.p_struct_or_union_specifier_1És@€ð×/Ñ/°°!±Ó5ˆáؐ1‘ØØ×#Ñ# A qÓ)ô+ˆˆ!ŠrAcóȗ|j|d«}t|«dk(r|dg|j|d«¬«|d<y|d|d|j|d«¬«|d<y)z³ struct_or_union_specifier : struct_or_union brace_open struct_declaration_list brace_close
                                      | struct_or_union brace_open brace_close
        rróNr’rKrzrà©r²rNrârLs   r?Úp_struct_or_union_specifier_2z%CParser.p_struct_or_union_specifier_2Ôsq€ð×/Ñ/°°!±Ó5ˆÜ ˆq‹6QŠ;áØØØ×'Ñ'¨¨1Ó-ô/ˆAˆaŠDñ
ØØ˜‘dØ×'Ñ'¨¨1Ó-ô/ˆAˆaŠDrAcóԗ|j|d«}t|«dk(r"||dg|j|d«¬«|d<y||d|d|j|d«¬«|d<y)a… struct_or_union_specifier   : struct_or_union ID brace_open struct_declaration_list brace_close
                                        | struct_or_union ID brace_open brace_close
                                        | struct_or_union TYPEID brace_open struct_declaration_list brace_close
                                        | struct_or_union TYPEID brace_open brace_close
        rrßr’rKrzróNrPrLs   r?Úp_struct_or_union_specifier_3z%CParser.p_struct_or_union_specifier_3æsy€ð ×/Ñ/°°!±Ó5ˆÜ ˆq‹6QŠ;áØq‘TØØ×'Ñ'¨¨1Ó-ô/ˆAˆaŠDñ
ؐq‘Tؘ‘dØ×'Ñ'¨¨1Ó-ô/ˆAˆaŠDrAcó—|d|d<y)zF struct_or_union : STRUCT
                            | UNION
        rrzNrÌrÈs  r?Úp_struct_or_unionzCParser.p_struct_or_unionùrÎrAcó^—t|«dk(r |dxsg|d<y|d|dxsgz|d<y)z struct_declaration_list     : struct_declaration
                                        | struct_declaration_list struct_declaration
        r’rrzNrêrÈs  r?Úp_struct_declaration_listz!CParser.p_struct_declaration_lists:€ô ˆq‹6QŠ;ؐQ‘4’:˜2ˆAˆaŠDàQ‘4˜1˜Q™4š: 2Ñ&ˆAˆaŠDrAcót—|d}d|dvsJ‚|d|j||d¬«}n‰t|d«dk(rY|dd}t|tj«r|}ntj
|«}|j|t |¬    «g¬«}n|j|t dd¬
«g¬«}||d<y) zW struct_declaration : specifier_qualifier_list struct_declarator_list_opt SEMI
        rrr†r’N©rrŸrnrz©rqr©)r§rNrorÚNoder}r3)r6rÉrrŸÚnodeÚ    decl_types      r?Úp_struct_declaration_1zCParser.p_struct_declaration_1
sâ€ð‰tˆØ  Y¡Ñ/Ð/Ð/à ˆQ‰4Ð Ø×,Ñ,ØØ˜‘dð-ó‰Eôf‘Ó  !Ò #𠘑< ‘?ˆDܘ$¤§
¡
Ô+Ø ‘    ä!×0Ñ0°Ó6    à×,Ñ,ØÜ Ô+Ð,ð-ó.‰Eð×,Ñ,ØÜ ¨DÔ1Ð2ð-ó4ˆEðˆˆ!ŠrAcó—d|d<y)z# struct_declaration : SEMI
        NrzrÌrÈs  r?Úp_struct_declaration_2zCParser.p_struct_declaration_20s €ðˆˆ!ŠrAcó—|dg|d<y)z1 struct_declaration : pppragma_directive
        rrzNrÌrÈs  r?Úp_struct_declaration_3zCParser.p_struct_declaration_35rÔrAcóR—t|«dk(r|d|dgz|d<y|dg|d<y)zŠ struct_declarator_list  : struct_declarator
                                    | struct_declarator_list COMMA struct_declarator
        rórràrzNrêrÈs  r?Úp_struct_declarator_listz CParser.p_struct_declarator_list:r4rAcó—|dddœ|d<y)z( struct_declarator : declarator
        rN©rqr‘rzrÌrÈs  r?Úp_struct_declarator_1zCParser.p_struct_declarator_1Cs€ð˜!™¨Ñ.ˆˆ!ŠrAcó€—t|«dkDr|d|ddœ|d<ytjdddd«|ddœ|d<y)z€ struct_declarator   : declarator COLON constant_expression
                                | COLON constant_expression
        ràrrfrzNr’)rNrrprÈs  r?Úp_struct_declarator_2zCParser.p_struct_declarator_2HsG€ô ˆq‹6AŠ:ؘa™D¨Q¨q©TÑ2ˆAˆaŠDä!ŸN™N¨4°°t¸TÓBÈqÐQRÉtÑTˆAˆaŠDrAcó^—tj|dd|j|d««|d<y)zM enum_specifier  : ENUM ID
                            | ENUM TYPEID
        r’Nrrz©rršrârÈs  r?Úp_enum_specifier_1zCParser.p_enum_specifier_1Qs+€ôz‰z˜!˜A™$  d×&7Ñ&7¸¸1Ó&=Ó>ˆˆ!ŠrAcó^—tjd|d|j|d««|d<y)zG enum_specifier  : ENUM brace_open enumerator_list brace_close
        NràrrzrkrÈs  r?Úp_enum_specifier_2zCParser.p_enum_specifier_2Ws+€ôz‰z˜$  !¡ d×&7Ñ&7¸¸1Ó&=Ó>ˆˆ!ŠrAcód—tj|d|d|j|d««|d<y)z› enum_specifier  : ENUM ID brace_open enumerator_list brace_close
                            | ENUM TYPEID brace_open enumerator_list brace_close
        r’rórrzNrkrÈs  r?Úp_enum_specifier_3zCParser.p_enum_specifier_3\s/€ôz‰z˜!˜A™$  !¡ d×&7Ñ&7¸¸1Ó&=Ó>ˆˆ!ŠrAcóö—t|«dk(r+tj|dg|dj«|d<yt|«dk(r    |d|d<y|djj |d«|d|d<y)z™ enumerator_list : enumerator
                            | enumerator_list COMMA
                            | enumerator_list COMMA enumerator
        r’rrzràN)rNrÚEnumeratorListrXÚ enumeratorsrJrÈs  r?Úp_enumerator_listzCParser.p_enumerator_listbst€ô
ˆq‹6QŠ;Ü×'Ñ'¨¨1©¨°°!±·
±
Ó;ˆAˆaŠDÜ ‹VqŠ[ؐQ‘4ˆAˆaŠDà ˆa‰D× Ñ × #Ñ # A a¡DÔ )ؐQ‘4ˆAˆaŠDrAcó\—tj|d|j|d««|d<y)z alignment_specifier  : _ALIGNAS LPAREN type_name RPAREN
                                 | _ALIGNAS LPAREN constant_expression RPAREN
        ràrrzN)rÚAlignasrârÈs  r?Úp_alignment_specifierzCParser.p_alignment_specifieros)€ô}‰}˜Q˜q™T 4×#4Ñ#4°Q¸Ó#:Ó;ˆˆ!ŠrAcó&—t|«dk(r+tj|dd|j|d««}n-tj|d|d|j|d««}|j    |j
|j «||d<y)zR enumerator  : ID
                        | ID EQUALS constant_expression
        r’rNràrz)rNrÚ
Enumeratorrâr[rWrX)r6rÉÚ
enumerators   r?Ú p_enumeratorzCParser.p_enumeratorusŒ€ô ˆq‹6QŠ;Ü×)Ñ)ؘ!™˜dØ×)Ñ)¨!¨QÓ/ó1‰Jô×)Ñ)ؘ!™˜a ™dØ×)Ñ)¨!¨QÓ/ó1ˆJð     ×јZŸ_™_¨j×.>Ñ.>Ô?àˆˆ!ŠrAcó—|d|d<y)zQ declarator  : id_declarator
                        | typeid_declarator
        rrzNrÌrÈs  r?Ú p_declaratorzCParser.p_declarator…rÎrA)r‚ÚID)ÚtypeidÚTYPEID)Útypeid_noparenr€có—|d|d<y)z1 xxx_declarator  : direct_xxx_declarator
        rrzNrÌrÈs  r?Úp_xxx_declarator_1zCParser.p_xxx_declarator_1‹rÎrAcó:—|j|d|d«|d<y)z9 xxx_declarator  : pointer direct_xxx_declarator
        r’rrzN©rvrÈs  r?Úp_xxx_declarator_2zCParser.p_xxx_declarator_2‘s"€ð×%Ñ% a¨¡d¨A¨a©DÓ1ˆˆ!ŠrAc
ód—tj|dddd|j|d«¬«|d<y)z' direct_xxx_declarator   : yyy
        rNr”rz)rrprârÈs  r?Úp_direct_xxx_declarator_1z!CParser.p_direct_xxx_declarator_1—s6€ô~‰~ؐq‘TØØØØ×#Ñ# A qÓ)ô +ˆˆ!ŠrAcó—|d|d<y)z@ direct_xxx_declarator   : LPAREN xxx_declarator RPAREN
        r’rzNrÌrÈs  r?Úp_direct_xxx_declarator_2z!CParser.p_direct_xxx_declarator_2¢rÎrAcóà—t|«dkDr|dngxsg}tjdt|«dkDr|dn|d||dj¬«}|j    |d|¬«|d<y)    z} direct_xxx_declarator   : direct_xxx_declarator LBRACKET type_qualifier_list_opt assignment_expression_opt RBRACKET
        rßràNrór©rnÚdimÚ    dim_qualsrX©rqrrrz)rNrÚ    ArrayDeclrXrv)r6rÉr|Úarrs    r?Úp_direct_xxx_declarator_3z!CParser.p_direct_xxx_declarator_3¨su€ô˜Q› !š1’¨Ò2°ˆôo‰oØÜ˜A› š
!’¨¨!©ØØA‘$—*‘*ô    ˆð ×%Ñ%¨1¨Q©4¸#Ð%Ó>ˆˆ!ŠrAcó&—|d|dfDcgc]}t|t«r|n|g‘Œ}}|Dcgc] }|D]}||‘ŒŒ}}}tjd|d||dj¬«}|j |d|¬«|d<ycc}wcc}}w)    zÿ direct_xxx_declarator   : direct_xxx_declarator LBRACKET STATIC type_qualifier_list_opt assignment_expression RBRACKET
                                    | direct_xxx_declarator LBRACKET type_qualifier_list STATIC assignment_expression RBRACKET
        ràróNrßrrŒrrz)roÚlistrrrXrv)r6rÉÚitemÚ listed_qualsÚsublistr…rŽr‘s        r?Úp_direct_xxx_declarator_4z!CParser.p_direct_xxx_declarator_4·s¾€ð˜1™˜a ™d˜ ö%Øô!+¨4´Ô 6™¸T¸FÑBð%ˆ ð%à)5÷!˜gÀ'ò!¸$ØÐòð!Tð!ˆ    ñ!äo‰oØØ!‘ØØA‘$—*‘*ô    ˆð ×%Ñ%¨1¨Q©4¸#Ð%Ó>ˆˆ!Šùò%ùó!s
B°B c
óä—tjdtj|d|j|d««|d|dng|dj¬«}|j |d|¬«|d<y)zi direct_xxx_declarator   : direct_xxx_declarator LBRACKET type_qualifier_list_opt TIMES RBRACKET
        NróràrrŒrrz©rrr~rârXrv©r6rÉr‘s   r?Úp_direct_xxx_declarator_5z!CParser.p_direct_xxx_declarator_5Ísp€ôo‰oØÜ—‘˜˜1™˜t×0Ñ0°°AÓ6Ó7Ø ™dÐ.a˜’d°BؐA‘$—*‘*ô    ˆð ×%Ñ%¨1¨Q©4¸#Ð%Ó>ˆˆ!ŠrAcó’—tj|dd|dj¬«}|j«jdk(ri|j
]|j
j D]D}t|tj«rn(|j|j|j«ŒF|j|d|¬«|d<y)z¹ direct_xxx_declarator   : direct_xxx_declarator LPAREN parameter_type_list RPAREN
                                    | direct_xxx_declarator LPAREN identifier_list_opt RPAREN
        ràNr©ÚargsrnrXÚLBRACErrz) rr~rXrlrnrŸÚparamsroÚ EllipsisParamr[rWrv)r6rÉÚfuncÚparams    r?Úp_direct_xxx_declarator_6z!CParser.p_direct_xxx_declarator_6Ùs®€ô
~‰~ؐ1‘ØØA‘$—*‘*ôˆð  × )Ñ )Ó +× 0Ñ 0°HÒ <؏y‰yÐ$Ø!ŸY™Y×-Ñ-òBEÜ! %¬×)<Ñ)<Ô=¹uØ×(Ñ(¨¯©°U·[±[ÕAðBð×%Ñ%¨1¨Q©4¸$Ð%Ó?ˆˆ!ŠrAcó—|j|d«}tj|dxsgd|¬«}t|«dkDr:|d}|j|j}|jŒ||_|d|d<y||d<y)zm pointer : TIMES type_qualifier_list_opt
                    | TIMES type_qualifier_list_opt pointer
        rr’N)r|rnrXràrz)rârÚPtrDeclrNrn)r6rÉrXÚ nested_typeÚ    tail_types     r?Ú    p_pointerzCParser.p_pointerös‚€ð×!Ñ! ! QÓ'ˆô —m‘m¨!¨A©$ª*°"¸4ÀuÔMˆ Ü ˆq‹6AŠ:ؘ!™ˆIØ—.‘.Ð,Ø%ŸN™N    ð—.‘.Ñ,à(ˆIŒNؐQ‘4ˆAˆaŠDàˆAˆaŠDrAcóR—t|«dk(r
|dg|d<y|d|dgz|d<y)zs type_qualifier_list : type_qualifier
                                | type_qualifier_list type_qualifier
        r’rrzNrêrÈs  r?Úp_type_qualifier_listzCParser.p_type_qualifier_listrìrAcó²—t|«dkDrA|djjtj|j |d«««|d|d<y)zn parameter_type_list : parameter_list
                                | parameter_list COMMA ELLIPSIS
        r’rràrzN)rNr¡rJrr¢rârÈs  r?Úp_parameter_type_listzCParser.p_parameter_type_listsJ€ô ˆq‹6AŠ:Ø ˆa‰DK‰K× Ñ œu×2Ñ2°4×3DÑ3DÀQÈÓ3JÓKÔ Là‰tˆˆ!ŠrAcóȗt|«dk(r+tj|dg|dj«|d<y|djj |d«|d|d<y)zz parameter_list  : parameter_declaration
                            | parameter_list COMMA parameter_declaration
        r’rrzràN©rNrÚ    ParamListrXr¡rJrÈs  r?Úp_parameter_listzCParser.p_parameter_list#óX€ô ˆq‹6QŠ;Ü—?‘? A a¡D 6¨1¨Q©4¯:©:Ó6ˆAˆaŠDà ˆa‰DK‰K× Ñ ˜q ™tÔ $ؐQ‘4ˆAˆaŠDrAcó¾—|d}|ds,tjdg|j|d«¬«g|d<|j|t    |d¬«g¬«d|d<y    )
zŸ parameter_declaration   : declaration_specifiers id_declarator
                                    | declaration_specifiers typeid_noparen_declarator
        rrnrxryr’rZrYrzN)rr}râr§r3rðs   r?Úp_parameter_declaration_1z!CParser.p_parameter_declaration_17ss€ð‰tˆØFŠ|Ü!×0Ñ0°%°Ø×'Ñ'¨¨1Ó-ô/ð0ˆD‰Là×'Ñ'ØÜ˜Q˜q™T”?Ð#ð(ó%à%&ñ(ˆˆ!ŠrAc ó.—|d}|ds,tjdg|j|d«¬«g|d<t|d«dkDrht|ddj«dk(rJ|j |ddjd«r&|j |t|dd¬    «g¬
«d}natjd |d d|dxstjdddd«|j|d«¬ «}|d}|j||«}||d<y)zR parameter_declaration   : declaration_specifiers abstract_declarator_opt
        rrnrxryrRrzr’Nr©rYrr…©rWr|r•rnrX) rr}rârNrr`r§r3ÚTypenamerprƒ)r6rÉrrqr€s     r?Úp_parameter_declaration_2z!CParser.p_parameter_declaration_2Cs0€ð‰tˆØFŠ|Ü!×0Ñ0°%°Ø×'Ñ'¨¨1Ó-ô/ð0ˆD‰Lô ˆtF‰|Ó ˜qÒ  ¤S¨¨f©°bÑ)9×)?Ñ)?Ó%@ÀAÒ%EØ×&Ñ& t¨F¡|°BÑ'7×'=Ñ'=¸aÑ'@ÔAØ×+Ñ+ØÜ Q q¡T°Ô5Ð6ð,ó8à89ñ;‰Dô—>‘>ØØ˜6‘lØØq‘TÒCœUŸ^™^¨D°$¸¸dÓCØ×'Ñ'¨¨1Ó-ô /ˆDð ˜F‘|ˆHØ×+Ñ+¨D°(Ó;ˆDàˆˆ!ŠrAcóȗt|«dk(r+tj|dg|dj«|d<y|djj |d«|d|d<y)ze identifier_list : identifier
                            | identifier_list COMMA identifier
        r’rrzràNr°rÈs  r?Úp_identifier_listzCParser.p_identifier_listcr³rAcó—|d|d<y)z- initializer : assignment_expression
        rrzNrÌrÈs  r?Úp_initializer_1zCParser.p_initializer_1mr×rAcór—|d€*tjg|j|d««|d<y|d|d<y)z‹ initializer : brace_open initializer_list_opt brace_close
                        | brace_open initializer_list COMMA brace_close
        r’Nrrz)rÚInitListrârÈs  r?Úp_initializer_2zCParser.p_initializer_2rs;€ð ˆQ‰4ˆ<Ü—>‘> " d×&7Ñ&7¸¸1Ó&=Ó>ˆAˆaŠDàQ‘4ˆAˆaŠDrAcóT—t|«dk(rN|d€|dntj|d|d«}tj|g|dj«|d<y|d€|dntj|d|d«}|dj
j |«|d|d<y)z initializer_list    : designation_opt initializer
                                | initializer_list COMMA designation_opt initializer
        ràrNr’rzró)rNrÚNamedInitializerr¿rXÚexprsrJ)r6rÉr–s   r?Úp_initializer_listzCParser.p_initializer_list{s €ô ˆq‹6QŠ;ؘQ™4˜<1Q’4¬U×-CÑ-CÀAÀaÁDÈ!ÈAÉ$Ó-OˆDÜ—>‘> 4 &¨!¨A©$¯*©*Ó5ˆAˆaŠDà˜Q™4˜<1Q’4¬U×-CÑ-CÀAÀaÁDÈ!ÈAÉ$Ó-OˆDØ ˆa‰DJ‰J× Ñ ˜dÔ #ؐQ‘4ˆAˆaŠDrAcó—|d|d<y)z. designation : designator_list EQUALS
        rrzNrÌrÈs  r?Ú p_designationzCParser.p_designation‡r×rAcóR—t|«dk(r
|dg|d<y|d|dgz|d<y)z_ designator_list : designator
                            | designator_list designator
        r’rrzNrêrÈs  r?Úp_designator_listzCParser.p_designator_listrìrAcó—|d|d<y)zi designator  : LBRACKET constant_expression RBRACKET
                        | PERIOD identifier
        r’rzNrÌrÈs  r?Ú p_designatorzCParser.p_designator•rÎrAc óڗtjd|ddddd|dxstjdddd«|j|d«¬«}|j    ||dd«|d<y)    zH type_name   : specifier_qualifier_list abstract_declarator_opt
        rrr…Nr’r·rnrz)rr¸rprârƒ)r6rÉr€s   r?Ú p_type_namezCParser.p_type_name›sr€ô—>‘>ØØA‘$v‘,™q/ØØ1‘Ò?œŸ™¨¨d°D¸$Ó?Ø×#Ñ# A qÓ)ô +ˆð×'Ñ'¨°!°A±$°v±,Ó?ˆˆ!ŠrAcóf—tjdddd«}|j||d¬«|d<y)z+ abstract_declarator     : pointer
        Nrrrz)rrprv)r6rÉÚ    dummytypes   r?Úp_abstract_declarator_1zCParser.p_abstract_declarator_1§s;€ô—N‘N 4¨¨t°TÓ:ˆ    Ø×%Ñ%ØØq‘Tð&óˆˆ!ŠrAcó:—|j|d|d«|d<y)zF abstract_declarator     : pointer direct_abstract_declarator
        r’rrzNr…rÈs  r?Úp_abstract_declarator_2zCParser.p_abstract_declarator_2¯s"€ð×%Ñ% a¨¡d¨A¨a©DÓ1ˆˆ!ŠrAcó—|d|d<y)z> abstract_declarator     : direct_abstract_declarator
        rrzNrÌrÈs  r?Úp_abstract_declarator_3zCParser.p_abstract_declarator_3´r×rAcó—|d|d<y)zA direct_abstract_declarator  : LPAREN abstract_declarator RPAREN r’rzNrÌrÈs  r?Úp_direct_abstract_declarator_1z&CParser.p_direct_abstract_declarator_1¾ó€à‰tˆˆ!ŠrAcóˆ—tjd|dg|dj¬«}|j|d|¬«|d<y)zn direct_abstract_declarator  : direct_abstract_declarator LBRACKET assignment_expression_opt RBRACKET
        NràrrŒrrz)rrrXrvr›s   r?Úp_direct_abstract_declarator_2z&CParser.p_direct_abstract_declarator_2ÂsI€ôo‰oØØ!‘ØØA‘$—*‘*ô    ˆð ×%Ñ%¨1¨Q©4¸#Ð%Ó>ˆˆ!ŠrAc    óæ—t|«dkDr|dngxsg}tjtjdddd«t|«dkDr|dn|d||j    |d«¬«|d<y)zk direct_abstract_declarator  : LBRACKET type_qualifier_list_opt assignment_expression_opt RBRACKET
        rór’NràrrŒrz)rNrrrprâ)r6rÉr|s   r?Úp_direct_abstract_declarator_3z&CParser.p_direct_abstract_declarator_3Ísl€ô˜Q› !š1’¨Ò2°ˆÜ‰Ü—‘  d¨D°$Ó7ܘA› š
!’¨¨!©ØØ×#Ñ# A qÓ)ô    +ˆˆ!ŠrAc
óЗtjdtj|d|j|d««g|dj¬«}|j |d|¬«|d<y)zZ direct_abstract_declarator  : direct_abstract_declarator LBRACKET TIMES RBRACKET
        NràrrŒrrzršr›s   r?Úp_direct_abstract_declarator_4z&CParser.p_direct_abstract_declarator_4×sa€ôo‰oØÜ—‘˜˜1™˜t×0Ñ0°°AÓ6Ó7ØØA‘$—*‘*ô    ˆð ×%Ñ%¨1¨Q©4¸#Ð%Ó>ˆˆ!ŠrAc
ó֗tjtjdddd«tj|d|j    |d««g|j    |d«¬«|d<y)z? direct_abstract_declarator  : LBRACKET TIMES RBRACKET
        NràrrŒrz)rrrpr~rârÈs  r?Úp_direct_abstract_declarator_5z&CParser.p_direct_abstract_declarator_5âsZ€ô‰Ü—‘  d¨D°$Ó7Ü—‘˜˜1™˜t×0Ñ0°°AÓ6Ó7ØØ×#Ñ# A qÓ)ô    +ˆˆ!ŠrAcó†—tj|dd|dj¬«}|j|d|¬«|d<y)zh direct_abstract_declarator  : direct_abstract_declarator LPAREN parameter_type_list_opt RPAREN
        ràNrržrrz)rr~rXrv)r6rÉr£s   r?Úp_direct_abstract_declarator_6z&CParser.p_direct_abstract_declarator_6ësF€ô~‰~ؐ1‘ØØA‘$—*‘*ôˆð
×%Ñ%¨1¨Q©4¸$Ð%Ó?ˆˆ!ŠrAc    óŒ—tj|dtjdddd«|j|d«¬«|d<y)zM direct_abstract_declarator  : LPAREN parameter_type_list_opt RPAREN
        r’Nrržrz)rr~rprârÈs  r?Úp_direct_abstract_declarator_7z&CParser.p_direct_abstract_declarator_7õs?€ô~‰~ؐ1‘Ü—‘  d¨D°$Ó7Ø×#Ñ# A qÓ)ô+ˆˆ!ŠrAc    ó,—|d|dfDcgc]}t|t«r|n|g‘Œ}}|Dcgc] }|D]}||‘ŒŒ}}}tjtjdddd«|d||j |d«¬«|d<ycc}wcc}}w)zÜ direct_abstract_declarator  : LBRACKET STATIC type_qualifier_list_opt assignment_expression RBRACKET
                                         | LBRACKET type_qualifier_list STATIC assignment_expression RBRACKET
        r’ràNrórrŒrz)ror”rrrprâ)r6rÉr•r–r—r…r|s       r?Úp_direct_abstract_declarator_8z&CParser.p_direct_abstract_declarator_8ýs·€ð
˜1™˜a ™d˜ ö%Øô!+¨4´Ô 6™¸T¸FÑBð%ˆ ð%à%1÷!˜'¸gò!°dØÐòð!ð!ˆñ!䏉ܗ‘  d¨D°$Ó7ؐ!‘ØØ×#Ñ# A qÓ)ô    +ˆˆ!Šùò    %ùó!s
B °BcóN—t|dt«r    |d|d<y|dg|d<y)zG block_item  : declaration
                        | statement
        rrzN)ror”rÈs  r?Ú p_block_itemzCParser.p_block_items,€ô" ! A¡$¬Ô-ˆq‰tˆˆ!аA°a±D°6ˆˆ!ŠrAcó`—t|«dk(s    |ddgk(r    |d|d<y|d|dz|d<y)z_ block_item_list : block_item
                            | block_item_list block_item
        r’NrrzrêrÈs  r?Úp_block_item_listzCParser.p_block_item_lists;€ô
˜A› !š  q¨¡t°¨v¢~ˆq‰tˆˆ!ЏA¸a¹DÀ1ÀQÁ4¹Kˆˆ!ŠrAcó^—tj|d|j|d«¬«|d<y)zA compound_statement : brace_open block_item_list_opt brace_close r’rrørzN)rrúrârÈs  r?Úp_compound_statement_1zCParser.p_compound_statement_1s+€ä~‰~ؘ!™Ø×#Ñ# A qÓ)ô+ˆˆ!ŠrAcód—tj|d|d|j|d««|d<y)z6 labeled_statement : ID COLON pragmacomp_or_statement rràrzN)rÚLabelrârÈs  r?Úp_labeled_statement_1zCParser.p_labeled_statement_1#ó-€ä{‰{˜1˜Q™4  1¡ t×'8Ñ'8¸¸AÓ'>Ó?ˆˆ!ŠrAcóf—tj|d|dg|j|d««|d<y)zL labeled_statement : CASE constant_expression COLON pragmacomp_or_statement r’rórrzN)rÚCaserârÈs  r?Úp_labeled_statement_2zCParser.p_labeled_statement_2's/€äz‰z˜!˜A™$  1¡ ¨×(9Ñ(9¸!¸QÓ(?Ó@ˆˆ!ŠrAcó^—tj|dg|j|d««|d<y)z; labeled_statement : DEFAULT COLON pragmacomp_or_statement ràrrzN)rÚDefaultrârÈs  r?Úp_labeled_statement_3zCParser.p_labeled_statement_3+s)€ä}‰}˜a ™d˜V T×%6Ñ%6°q¸!Ó%<Ó=ˆˆ!ŠrAc    ó¤—tj|dtj|j|d««|j|d««|d<y)z labeled_statement : ID COLON rrzN)rrìÚEmptyStatementrârÈs  r?Úp_labeled_statement_4zCParser.p_labeled_statement_4/sD€ä{‰{˜1˜Q™4¤×!5Ñ!5°d×6GÑ6GÈÈ1Ó6MÓ!NÐPT×PaÑPaÐbcÐefÓPgÓhˆˆ!ŠrAc    ó¦—tj|dtj|j|d««g|j|d««|d<y)z4 labeled_statement : CASE constant_expression COLON r’rrzN)rrðrörârÈs  r?Úp_labeled_statement_5zCParser.p_labeled_statement_53sG€äz‰z˜!˜A™$¤×!5Ñ!5°d×6GÑ6GÈÈ1Ó6MÓ!NРOÐQU×QbÑQbÐcdÐfgÓQhÓiˆˆ!ŠrAcóž—tjtj|j|d««g|j|d««|d<y)z# labeled_statement : DEFAULT COLON rrzN)rrórörârÈs  r?Úp_labeled_statement_6zCParser.p_labeled_statement_67s@€ä}‰}œe×2Ñ2°4×3DÑ3DÀQÈÓ3JÓKÐLÈd×N_ÑN_Ð`aÐcdÓNeÓfˆˆ!ŠrAc    óf—tj|d|dd|j|d««|d<y)zK selection_statement : IF LPAREN expression RPAREN pragmacomp_or_statement ràrßNrrz©rÚIfrârÈs  r?Úp_selection_statement_1zCParser.p_selection_statement_1;s/€äx‰x˜˜!™˜a ™d D¨$×*;Ñ*;¸A¸qÓ*AÓBˆˆ!ŠrAc    ól—tj|d|d|d|j|d««|d<y)zZ selection_statement : IF LPAREN expression RPAREN statement ELSE pragmacomp_or_statement ràrßérrzNrýrÈs  r?Úp_selection_statement_2zCParser.p_selection_statement_2?s3€äx‰x˜˜!™˜a ™d A a¡D¨$×*;Ñ*;¸A¸qÓ*AÓBˆˆ!ŠrAc
óv—ttj|d|d|j|d«««|d<y)zO selection_statement : SWITCH LPAREN expression RPAREN pragmacomp_or_statement ràrßrrzN)r
rÚSwitchrârÈs  r?Úp_selection_statement_3zCParser.p_selection_statement_3Cs6€äÜ— ‘ ˜Q˜q™T 1 Q¡4¨×):Ñ):¸1¸aÓ)@ÓAóCˆˆ!ŠrAcód—tj|d|d|j|d««|d<y)zN iteration_statement : WHILE LPAREN expression RPAREN pragmacomp_or_statement ràrßrrzN)rÚWhilerârÈs  r?Úp_iteration_statement_1zCParser.p_iteration_statement_1HrîrAcód—tj|d|d|j|d««|d<y)zV iteration_statement : DO pragmacomp_or_statement WHILE LPAREN expression RPAREN SEMI rßr’rrzN)rÚDoWhilerârÈs  r?Úp_iteration_statement_2zCParser.p_iteration_statement_2Ls-€ä}‰}˜Q˜q™T 1 Q¡4¨×):Ñ):¸1¸aÓ)@ÓAˆˆ!ŠrAc
ót—tj|d|d|d|d|j|d««|d<y)zx iteration_statement : FOR LPAREN expression_opt SEMI expression_opt SEMI expression_opt RPAREN pragmacomp_or_statement ràrßré    rrzN)rÚForrârÈs  r?Úp_iteration_statement_3zCParser.p_iteration_statement_3Ps9€äy‰y˜˜1™˜q ™t Q q¡T¨1¨Q©4°×1BÑ1BÀ1ÀaÓ1HÓIˆˆ!ŠrAc
ó¼—tjtj|d|j|d««|d|d|d|j|d««|d<y)zp iteration_statement : FOR LPAREN declaration expression_opt SEMI expression_opt RPAREN pragmacomp_or_statement ràrróéérzN)rrÚDeclListrârÈs  r?Úp_iteration_statement_4zCParser.p_iteration_statement_4TsU€äy‰yœŸ™¨¨!©¨d×.?Ñ.?ÀÀ1Ó.EÓFؘ1™˜q ™t Q q¡T¨4×+<Ñ+<¸QÀÓ+BóDˆˆ!ŠrAcó\—tj|d|j|d««|d<y)z  jump_statement  : GOTO ID SEMI r’rrzN)rÚGotorârÈs  r?Úp_jump_statement_1zCParser.p_jump_statement_1Ys'€äz‰z˜!˜A™$ × 1Ñ 1°!°QÓ 7Ó8ˆˆ!ŠrAcóT—tj|j|d««|d<y)z jump_statement  : BREAK SEMI rrzN)rÚBreakrârÈs  r?Úp_jump_statement_2zCParser.p_jump_statement_2]s!€ä{‰{˜4×,Ñ,¨Q°Ó2Ó3ˆˆ!ŠrAcóT—tj|j|d««|d<y)z! jump_statement  : CONTINUE SEMI rrzN)rÚContinuerârÈs  r?Úp_jump_statement_3zCParser.p_jump_statement_3as!€ä~‰~˜d×/Ñ/°°1Ó5Ó6ˆˆ!ŠrAcó|—tjt|«dk(r|dnd|j|d««|d<y)z\ jump_statement  : RETURN expression SEMI
                            | RETURN SEMI
        rór’Nrrz)rÚReturnrNrârÈs  r?Úp_jump_statement_4zCParser.p_jump_statement_4es6€ô|‰|¤C¨£F¨a¢K˜A˜ašD°T¸4×;LÑ;LÈQÐPQÓ;RÓSˆˆ!ŠrAcóp—|d€)tj|j|d««|d<y|d|d<y)z, expression_statement : expression_opt SEMI rNr’rz)rrörârÈs  r?Úp_expression_statementzCParser.p_expression_statementks9€à ˆQ‰4ˆ<Ü×'Ñ'¨×(9Ñ(9¸!¸QÓ(?Ó@ˆAˆaŠDàQ‘4ˆAˆaŠDrAcó—t|«dk(r    |d|d<yt|dtj«s*tj|dg|dj«|d<|dj
j |d«|d|d<y)zn expression  : assignment_expression
                        | expression COMMA assignment_expression
        r’rrzràN)rNrorÚExprListrXrÃrJrÈs  r?Ú p_expressionzCParser.p_expressionrsw€ô ˆq‹6QŠ;ؐQ‘4ˆAˆaŠDä˜a ™d¤E§N¡NÔ3Ü—~‘~ q¨¡t f¨a°©d¯j©jÓ9!‘à ˆa‰DJ‰J× Ñ ˜a ™dÔ #ؐQ‘4ˆAˆaŠDrAcó—|d|d<y)z: assignment_expression : LPAREN compound_statement RPAREN r’rzNrÌrÈs  r?Ú#p_parenthesized_compound_expressionz+CParser.p_parenthesized_compound_expressionrÖrAcó`—tj|dg|j|d«¬«|d<y)z typedef_name : TYPEID rryrzNr(rÈs  r?Úp_typedef_namezCParser.p_typedef_nameƒs+€ä×#Ñ# Q q¡T F°$×2CÑ2CÀAÀqÓ2IÔJˆˆ!ŠrAcó”—t|«dk(r    |d|d<ytj|d|d|d|dj«|d<y)z› assignment_expression   : conditional_expression
                                    | unary_expression assignment_operator assignment_expression
        r’rrzràN)rNrÚ
AssignmentrXrÈs  r?Úp_assignment_expressionzCParser.p_assignment_expression‡sJ€ô ˆq‹6QŠ;ؐQ‘4ˆAˆaŠDä×#Ñ# A a¡D¨!¨A©$°°!±°a¸±d·j±jÓAˆAˆaŠDrAcó—|d|d<y)aÞ assignment_operator : EQUALS
                                | XOREQUAL
                                | TIMESEQUAL
                                | DIVEQUAL
                                | MODEQUAL
                                | PLUSEQUAL
                                | MINUSEQUAL
                                | LSHIFTEQUAL
                                | RSHIFTEQUAL
                                | ANDEQUAL
                                | OREQUAL
        rrzNrÌrÈs  r?Úp_assignment_operatorzCParser.p_assignment_operator•s€ð‰tˆˆ!ŠrAcó—|d|d<y)z. constant_expression : conditional_expression rrzNrÌrÈs  r?Úp_constant_expressionzCParser.p_constant_expression¤rÖrAcó”—t|«dk(r    |d|d<ytj|d|d|d|dj«|d<y)zœ conditional_expression  : binary_expression
                                    | binary_expression CONDOP expression COLON conditional_expression
        r’rrzràrßN)rNrÚ    TernaryOprXrÈs  r?Úp_conditional_expressionz CParser.p_conditional_expression¨sH€ô ˆq‹6QŠ;ؐQ‘4ˆAˆaŠDä—?‘? 1 Q¡4¨¨1©¨q°©t°Q°q±T·Z±ZÓ@ˆAˆaŠDrAcó”—t|«dk(r    |d|d<ytj|d|d|d|dj«|d<y)ak binary_expression   : cast_expression
                                | binary_expression TIMES binary_expression
                                | binary_expression DIVIDE binary_expression
                                | binary_expression MOD binary_expression
                                | binary_expression PLUS binary_expression
                                | binary_expression MINUS binary_expression
                                | binary_expression RSHIFT binary_expression
                                | binary_expression LSHIFT binary_expression
                                | binary_expression LT binary_expression
                                | binary_expression LE binary_expression
                                | binary_expression GE binary_expression
                                | binary_expression GT binary_expression
                                | binary_expression EQ binary_expression
                                | binary_expression NE binary_expression
                                | binary_expression AND binary_expression
                                | binary_expression OR binary_expression
                                | binary_expression XOR binary_expression
                                | binary_expression LAND binary_expression
                                | binary_expression LOR binary_expression
        r’rrzràN)rNrÚBinaryOprXrÈs  r?Úp_binary_expressionzCParser.p_binary_expression±sH€ô* ˆq‹6QŠ;ؐQ‘4ˆAˆaŠDä—>‘> ! A¡$¨¨!©¨a°©d°A°a±D·J±JÓ?ˆAˆaŠDrAcó—|d|d<y)z$ cast_expression : unary_expression rrzNrÌrÈs  r?Úp_cast_expression_1zCParser.p_cast_expression_1ËrÖrAcód—tj|d|d|j|d««|d<y)z; cast_expression : LPAREN type_name RPAREN cast_expression r’rórrzN)rÚCastrârÈs  r?Úp_cast_expression_2zCParser.p_cast_expression_2Ïs-€äz‰z˜!˜A™$  !¡ d×&7Ñ&7¸¸1Ó&=Ó>ˆˆ!ŠrAcó—|d|d<y)z* unary_expression    : postfix_expression rrzNrÌrÈs  r?Úp_unary_expression_1zCParser.p_unary_expression_1ÓrÖrAcó^—tj|d|d|dj«|d<y)z¸ unary_expression    : PLUSPLUS unary_expression
                                | MINUSMINUS unary_expression
                                | unary_operator cast_expression
        rr’rzN©rÚUnaryOprXrÈs  r?Úp_unary_expression_2zCParser.p_unary_expression_2×s*€ô
}‰}˜Q˜q™T 1 Q¡4¨¨1©¯©Ó4ˆˆ!ŠrAcóŠ—tj|dt|«dk(r|dn|d|j|d««|d<y)z» unary_expression    : SIZEOF unary_expression
                                | SIZEOF LPAREN type_name RPAREN
                                | _ALIGNOF LPAREN type_name RPAREN
        rràr’rzN)rr@rNrârÈs  r?Úp_unary_expression_3zCParser.p_unary_expression_3ÞsD€ô
}‰}Ø ˆa‰Dܘ“F˜a’KˆAˆaŠD Q q¡TØ × Ñ ˜a Ó #ó%ˆˆ!ŠrAcó—|d|d<y)zÏ unary_operator  : AND
                            | TIMES
                            | PLUS
                            | MINUS
                            | NOT
                            | LNOT
        rrzNrÌrÈs  r?Úp_unary_operatorzCParser.p_unary_operatorèr$rAcó—|d|d<y)z* postfix_expression  : primary_expression rrzNrÌrÈs  r?Úp_postfix_expression_1zCParser.p_postfix_expression_1òrÖrAcó^—tj|d|d|dj«|d<y)zG postfix_expression  : postfix_expression LBRACKET expression RBRACKET rràrzN)rÚArrayRefrXrÈs  r?Úp_postfix_expression_2zCParser.p_postfix_expression_2ös(€ä~‰~˜a ™d A a¡D¨!¨A©$¯*©*Ó5ˆˆ!ŠrAcó~—tj|dt|«dk(r|dnd|dj«|d<y)zœ postfix_expression  : postfix_expression LPAREN argument_expression_list RPAREN
                                | postfix_expression LPAREN RPAREN
        rrßràNrz)rÚFuncCallrNrXrÈs  r?Úp_postfix_expression_3zCParser.p_postfix_expression_3ús6€ô~‰~˜a ™d¬C°«F°aªK A a¢D¸TÀ1ÀQÁ4Ç:Á:ÓNˆˆ!ŠrAcó²—tj|d|j|d««}tj|d|d||dj«|d<y)zÿ postfix_expression  : postfix_expression PERIOD ID
                                | postfix_expression PERIOD TYPEID
                                | postfix_expression ARROW ID
                                | postfix_expression ARROW TYPEID
        ràrr’rzN)rr~râÚ    StructRefrX)r6rÉÚfields   r?Úp_postfix_expression_4zCParser.p_postfix_expression_4sM€ô —‘˜˜1™˜t×0Ñ0°°AÓ6Ó7ˆÜ‰˜q ™t Q q¡T¨5°!°A±$·*±*Ó=ˆˆ!ŠrAcód—tjd|dz|d|dj«|d<y)z{ postfix_expression  : postfix_expression PLUSPLUS
                                | postfix_expression MINUSMINUS
        rÉr’rrzNr?rÈs  r?Úp_postfix_expression_5zCParser.p_postfix_expression_5    s.€ô}‰}˜S 1 Q¡4™Z¨¨1©¨q°©t¯z©zÓ:ˆˆ!ŠrAcóB—tj|d|d«|d<y)zÇ postfix_expression  : LPAREN type_name RPAREN brace_open initializer_list brace_close
                                | LPAREN type_name RPAREN brace_open initializer_list COMMA brace_close
        r’rßrzN)rÚCompoundLiteralrÈs  r?Úp_postfix_expression_6zCParser.p_postfix_expression_6s"€ô×$Ñ$ Q q¡T¨1¨Q©4Ó0ˆˆ!ŠrAcó—|d|d<y)z" primary_expression  : identifier rrzNrÌrÈs  r?Úp_primary_expression_1zCParser.p_primary_expression_1rÖrAcó—|d|d<y)z  primary_expression  : constant rrzNrÌrÈs  r?Úp_primary_expression_2zCParser.p_primary_expression_2rÖrAcó—|d|d<y)zp primary_expression  : unified_string_literal
                                | unified_wstring_literal
        rrzNrÌrÈs  r?Úp_primary_expression_3zCParser.p_primary_expression_3rÎrAcó—|d|d<y)z0 primary_expression  : LPAREN expression RPAREN r’rzNrÌrÈs  r?Úp_primary_expression_4zCParser.p_primary_expression_4#rÖrAcó—|j|d«}tjtj|d|«tj|d|dg|«|«|d<y)za primary_expression  : OFFSETOF LPAREN type_name COMMA offsetof_member_designator RPAREN
        rràrßrzN)rârrLr~r$)r6rÉrXs   r?Úp_primary_expression_5zCParser.p_primary_expression_5'sV€ð×!Ñ! ! QÓ'ˆÜ~‰~œeŸh™h q¨¡t¨UÓ3Ü#Ÿn™n¨a°©d°A°a±D¨\¸5ÓAØ#ó%ˆˆ!ŠrAcóV—t|«dk(r    |d|d<yt|«dk(r2tj|d|d|d|dj«|d<yt|«dk(r.tj|d|d|dj«|d<yt dt|«z«‚)    zì offsetof_member_designator : identifier
                                         | offsetof_member_designator PERIOD identifier
                                         | offsetof_member_designator LBRACKET expression RBRACKET
        r’rrzróràrßz$Unexpected parsing state. len(p): %uN)rNrrOrXrIÚNotImplementedErrorrÈs  r?Úp_offsetof_member_designatorz$CParser.p_offsetof_member_designator/sš€ô
ˆq‹6QŠ;ؐQ‘4ˆAˆaŠDÜ ‹VqŠ[Ü—?‘? 1 Q¡4¨¨1©¨q°©t°Q°q±T·Z±ZÓ@ˆAˆaŠDÜ ‹VqŠ[Ü—>‘> ! A¡$¨¨!©¨a°©d¯j©jÓ9ˆAˆaŠDä%Ð&LÌsÐSTËvÑ&UÓVÐ VrAcóȗt|«dk(r+tj|dg|dj«|d<y|djj |d«|d|d<y)zœ argument_expression_list    : assignment_expression
                                        | argument_expression_list COMMA assignment_expression
        r’rrzràN)rNrr$rXrÃrJrÈs  r?Úp_argument_expression_listz"CParser.p_argument_expression_list=sX€ô ˆq‹6QŠ;Ü—>‘> 1 Q¡4 &¨!¨A©$¯*©*Ó5ˆAˆaŠDà ˆa‰DJ‰J× Ñ ˜a ™dÔ #ؐQ‘4ˆAˆaŠDrAcó\—tj|d|j|d««|d<y)z identifier  : ID rrzN)rr~rârÈs  r?Ú p_identifierzCParser.p_identifierGs'€äx‰x˜˜!™˜d×/Ñ/°°1Ó5Ó6ˆˆ!ŠrAcó—d}d}|dddD]}|dvr|dz }Œ |dvsŒ|dz }Œd}|dkDr td«‚|d    kDr td
«‚d |zd |zz}tj|d z|d|j|d««|d<y)zÆ constant    : INT_CONST_DEC
                        | INT_CONST_OCT
                        | INT_CONST_HEX
                        | INT_CONST_BIN
                        | INT_CONST_CHAR
        rzréýÿÿÿN©ÚlÚL)ÚuÚUrz.Constant cannot have more than one u/U suffix.r’z.Constant cannot have more than two l/L suffix.z    unsigned zlong rx)Ú
ValueErrorrÚConstantrâ)r6rÉÚuCountÚlCountÚxr£Úprefixs       r?Ú p_constant_1zCParser.p_constant_1Ks¶€ðˆØˆØ1‘bcò    ˆAؐJ‰Ø˜!‘ ‘ؐj’ؘ!‘ ‘ð        ð
ˆØ AŠ:ÜÐNÓOÐ OØ aŠZÜÐNÓOÐ OؘvÑ%¨°&Ñ(8Ñ8ˆÜ~‰~Ø U‰N˜A˜a™D $×"3Ñ"3°A°qÓ"9ó;ˆˆ!ŠrAcó–—|dddvrd}n|dddvrd}nd}tj||d|j|d««|d<y    )
zM constant    : FLOAT_CONST
                        | HEX_FLOAT_CONST
        rrR)ÚfÚFÚfloatrjz long doubleÚdoublerzN©rrprâ)r6rÉr£s   r?Ú p_constant_2zCParser.p_constant_2bs]€ð ˆQ‰4‰8zÑ !؉AØ ˆq‰T"‰X˜Ñ #؉AàˆAä~‰~Ø ˆq‰tT×&Ñ& q¨!Ó,ó.ˆˆ!ŠrAcó^—tjd|d|j|d««|d<y)z¿ constant    : CHAR_CONST
                        | WCHAR_CONST
                        | U8CHAR_CONST
                        | U16CHAR_CONST
                        | U32CHAR_CONST
        ÚcharrrzNr{rÈs  r?Ú p_constant_3zCParser.p_constant_3ps.€ô~‰~Ø Aa‘D˜$×+Ñ+¨A¨qÓ1ó3ˆˆ!ŠrAcóҗt|«dk(r.tjd|d|j|d««|d<y|djdd|dddz|d_|d|d<y)z~ unified_string_literal  : STRING_LITERAL
                                    | unified_string_literal STRING_LITERAL
        r’ÚstringrrzNrR)rNrrprâÚvaluerÈs  r?Úp_unified_string_literalz CParser.p_unified_string_literalsp€ô ˆq‹6QŠ;Ü—>‘>ؘ!˜A™$ × 1Ñ 1°!°QÓ 7ó9ˆAˆaŠDð˜1™Ÿ™ C R˜¨1¨Q©4°°¨8Ñ3ˆAˆa‰DŒJؐQ‘4ˆAˆaŠDrAcóî—t|«dk(r.tjd|d|j|d««|d<y|djj «dd|dddz|d_|d|d<y)a unified_wstring_literal : WSTRING_LITERAL
                                    | U8STRING_LITERAL
                                    | U16STRING_LITERAL
                                    | U32STRING_LITERAL
                                    | unified_wstring_literal WSTRING_LITERAL
                                    | unified_wstring_literal U8STRING_LITERAL
                                    | unified_wstring_literal U16STRING_LITERAL
                                    | unified_wstring_literal U32STRING_LITERAL
        r’rrrzNrR)rNrrprâr‚ÚrstriprÈs  r?Úp_unified_wstring_literalz!CParser.p_unified_wstring_literalŠsz€ô ˆq‹6QŠ;Ü—>‘>ؘ!˜A™$ × 1Ñ 1°!°QÓ 7ó9ˆAˆaŠDð˜1™Ÿ™×*Ñ*Ó,¨S¨bÐ1°A°a±D¸¸°HÑ<ˆAˆa‰DŒJؐQ‘4ˆAˆaŠDrAcóV—|d|d<|jd|jd««y)z  brace_open  :   LBRACE
        rrzN©Ú
set_linenoÚlinenorÈs  r?Ú p_brace_openzCParser.p_brace_open›ó'€ð‰tˆˆ!‰Ø     ‰ Q˜Ÿ™ › Õ$rAcóV—|d|d<|jd|jd««y)z  brace_close :   RBRACE
        rrzNrˆrÈs  r?Ú p_brace_closezCParser.p_brace_close¡rŒrAcó—d|d<y)zempty : NrzrÌrÈs  r?Úp_emptyzCParser.p_empty§s €àˆˆ!ŠrAc    óü—|rT|jd|jz|j|j|jj |«¬««y|jd|jj «y)Nz
before: %s)rŠrezAt end of input)rUr‚rbrŠr.Úfind_tok_columnrDrÈs  r?Úp_errorzCParser.p_error«si€ñ Ø × Ñ Ø˜qŸw™wÑ&Ø— ‘  1§8¡8Ø#'§9¡9×#<Ñ#<¸QÓ#?ðóAõ Bð
× Ñ Ð/°·±×1CÑ1CÕ DrAN)rF)F)´Ú__name__Ú
__module__Ú __qualname__rr@rFrLrPrYr[r`r*r+r,r-rlrvrƒrŽr§r®r²Ú
precedencerÊrÍrÑrÓrÖrÙrÛrÝrãrårèrërñrôrörûrÿrrrr    r r rrrrrrrr!r#r&r)r+r/r1r3r7r:r<r>r@rBrErGrIrNrQrSrUrWr^r`rbrdrgrirlrnrprtrwr{r}rrƒr†rˆrŠr’r˜rœr¥rªr¬r®r²rµr¹r»r½rÀrÄrÆrÈrÊrÌrÏrÑrÓrÕrØrÚrÜrÞràrârärærèrêrírñrôr÷rùrûrÿrrrr rrrrrr r"r%r'r)r,r.r0r3r6r8r;r=rArCrErGrJrMrQrSrVrXrZr\r^r`rcrergrur|rrƒr†r‹rŽrr“rÌrAr?r r s•„ðØØ%ØØ'ØØóm(ó^ò0)ò ò+ò,òò:òòòò$òR!òd*óXó2Wòrò"ð €Jò('òò òò
ò
ò ò
ò
Mò3ò
=ò8òò$    ò
òn    ò(,òzò4òCò
Fò
GòCò
Hò
Pò
Sò
Tò
Pò
Cò
Pò
Uò
òò Kò òòò8òDò 8ò DòPò
Pò
Cò
Sò
Qò
Hò    +ò/ò$/ò&ò'ò$òLò
ò
8ò/ò
Uò?ò ?ò
?ò ò<ò ò ñ <Ð!5Ð7SÓTñóUðñ
<Ð!5Ð7SÓTñ2óUð2ñ
<Ð!5Ð7SÓTñ+óUð+ñ<Ð!5Ó6ñó7ðñ
<Ð!5Ð7SÓTñ ?óUð ?ñ<Ð!5Ð7SÓTñ?óUð?ñ*<Ð!5Ð7SÓTñ    ?óUð    ?ñ<Ð!5Ð7SÓTñ@óUð@ò8ò<8ò òò(
(òò@òò
ò
òò8ò ò
@òò2ò
òò    ?ò+ò    ?ò+ò@ò+ò +ò":òHò+ò @òAò>òiòjògòCòCòCò
@òBòJòDò
9ò4ò7òTò ò òòKòBò òòAò@ò4ò?òò5ò%òòò6òOò >ò;ò 1ò òòò ò%ò Wòò7ò;ò. .ò3ò    òò"%ò %ò ó
ErAr N)ÚplyrrrÚc_lexerrÚ    plyparserrrrr    Úast_transformsr
r r rÌrAr?ú<module>rœs:ðõåÝßEÓEßCð
ôcEˆiócEó
ñcErA