|
1 |
|
// |
2 |
|
// Cpp-01. Main. Kirill Kobelev. |
3 |
|
// |
4 |
|
// Even C++ 2003 Grammar. The grammar is close to the Standard ISO/IEC 14882. |
5 |
|
// |
6 |
|
// This grammar is called even because some of the language restrictions were moved from the grammar itself |
7 |
|
// into the handlers of the grammar rules. Several similar rules of the original grammar were combined into |
8 |
|
// non-terminals. This approach dramatically reduced the number and complexity of grammar conflicts. |
9 |
|
// Plus this made the grammar compact and easy to understand. |
10 |
|
// |
11 |
|
// The rules of this grammar are divided into several sections. Each rule section starts with the <rules> |
12 |
|
// delimiter. Rules can use non-terminals from other sections only if these non-terminals are defined there |
13 |
|
// as public. |
14 |
|
// |
15 |
|
// The language of this grammar is slightly wider than the C++ 2003 standard. For example this grammar allows |
16 |
|
// specifying base types for enums and allows several other minor things. |
17 |
|
// |
18 |
|
|
19 |
|
#undef Grammars_CppAppIds_H |
20 |
|
#include "CppGrammarAppIds.H" |
21 |
|
#include "TerminalSymbols.GRA" |
22 |
|
|
23 |
|
TranslationUnit; |
24 |
|
|
25 |
|
|
26 |
|
|
27 |
4000 |
TranslationUnit |
28 |
R0 |
: DeclarationsSeq |
29 |
|
; |
30 |
|
|
31 |
|
#include "Cpp_02_Names.GRA" |
32 |
|
#include "Cpp_03_Declarations.GRA" |
33 |
|
#include "Cpp_04_Declarators.GRA" |
34 |
|
|
35 |
|
#include "Cpp_05_Namespaces.GRA" |
36 |
|
#include "Cpp_06_Enums.GRA" |
37 |
|
#include "Cpp_07_Classes.GRA" |
38 |
|
#include "Cpp_08_Templates.GRA" |
39 |
|
|
40 |
|
#include "Cpp_09_Functions.GRA" |
41 |
|
#include "Cpp_10_Statements.GRA" |
42 |
|
#include "Cpp_11_Expressions.GRA" |
43 |
|
|
44 |
|
#include "ExpectedConflicts.GRA" |
45 |
|
|
46 |
|
|
1 |
|
// |
2 |
|
// Application Ids for various Cpp grammar objects. |
3 |
|
// |
4 |
|
// The application identifiers are numbers. They are used in the callback handler of the grammar based |
5 |
|
// parser to identify terminal and non-terminal symbols, rules of the grammar, expected conflicts, etc. |
6 |
|
// |
7 |
|
|
8 |
|
#ifndef Grammars_CppAppIds_H |
9 |
|
#define Grammars_CppAppIds_H |
|
10 |
|
|
11 |
|
// ------------------------------------------------ |
12 |
|
// |
13 |
|
// Terminal symbol ids |
14 |
|
// |
15 |
|
// ------------------------------------------------ |
16 |
|
|
17 |
|
// Symbols for DeclTypeSpecifier enums. |
18 |
|
#define sym_typedef |
3601 |
19 |
|
#define sym_friend |
3602 |
20 |
|
#define sym_inline |
3603 |
21 |
|
#define sym_virtual |
3604 |
22 |
|
#define sym_explicit |
3605 |
23 |
|
#define sym_register |
3606 |
24 |
|
#define sym_auto |
3607 |
25 |
|
#define sym_static |
3608 |
26 |
|
#define sym_extern |
3609 |
27 |
|
#define sym_mutable |
3610 |
28 |
|
#define sym_const |
3611 |
29 |
|
#define sym_volatile |
3612 |
30 |
|
|
31 |
|
// Symbols for BuiltInTypeSpecifier. |
32 |
|
#define sym_void |
3619 |
33 |
|
#define sym_bool |
3620 |
34 |
|
#define sym_char |
3621 |
35 |
|
#define sym_wchar |
3622 |
36 |
|
#define sym_short |
3623 |
37 |
|
#define sym_int |
3624 |
38 |
|
#define sym_long |
3625 |
39 |
|
#define sym_signed |
3626 |
40 |
|
#define sym_unsigned |
3627 |
41 |
|
#define sym_float |
3628 |
42 |
|
#define sym_double |
3629 |
43 |
|
|
44 |
|
// Symbols for ClassKey. |
45 |
|
#define sym_struct |
3640 |
46 |
|
#define sym_union |
3641 |
47 |
|
#define sym_class |
3642 |
48 |
|
|
49 |
|
// Symbols for AccessSpecifier. |
50 |
|
#define sym_public |
3646 |
51 |
|
#define sym_protected |
3647 |
52 |
|
#define sym_private |
3648 |
53 |
|
|
54 |
|
// Symbols for Statements. |
55 |
|
#define sym_if |
3650 |
56 |
|
#define sym_else |
3651 |
57 |
|
#define sym_switch |
3652 |
58 |
|
#define sym_for |
3653 |
59 |
|
#define sym_while |
3654 |
60 |
|
#define sym_do |
3655 |
61 |
|
#define sym_goto |
3656 |
62 |
|
#define sym_break |
3657 |
63 |
|
#define sym_continue |
3658 |
64 |
|
#define sym_return |
3659 |
65 |
|
|
66 |
|
// Misc symbols. |
67 |
|
#define sym_lpar |
3660 |
68 |
|
#define sym_rpar |
3661 |
69 |
|
#define sym_ellipsis |
3662 |
70 |
|
#define sym_question |
3663 |
71 |
|
#define sym_colon |
3664 |
72 |
|
#define sym_semicol |
3665 |
73 |
|
#define sym_identifier |
3666 |
74 |
|
#define sym_try |
3667 |
75 |
|
#define sym_enum |
3668 |
76 |
|
#define sym_namespace |
3669 |
77 |
|
#define sym_operator |
3670 |
78 |
|
#define sym_template |
3671 |
79 |
|
#define sym_export |
3672 |
80 |
|
#define sym_using |
3673 |
81 |
|
#define sym_asm |
3674 |
82 |
|
#define sym_case |
3675 |
83 |
|
#define sym_default |
3676 |
84 |
|
#define sym_catch |
3677 |
85 |
|
#define sym_lcurvbr |
3678 |
86 |
|
#define sym_rcurvbr |
3679 |
87 |
|
|
88 |
|
// Symbols for Assignment operator. |
89 |
|
#define sym_assign |
3739 |
90 |
|
#define sym_plus_asgn |
3740 |
91 |
|
#define sym_minus_asgn |
3741 |
92 |
|
#define sym_mul_asgn |
3742 |
93 |
|
#define sym_div_asgn |
3743 |
94 |
|
#define sym_rmnd_asgn |
3744 |
95 |
|
#define sym_lsh_asgn |
3745 |
96 |
|
#define sym_rsh_asgn |
3746 |
97 |
|
#define sym_btand_asgn |
3747 |
98 |
|
#define sym_btor_asgn |
3748 |
99 |
|
#define sym_btxor_asgn |
3749 |
100 |
|
|
101 |
|
// Symbols for comparison operators. |
102 |
|
#define sym_eq |
3751 |
103 |
|
#define sym_ne |
3752 |
104 |
|
#define sym_lt |
3753 |
105 |
|
#define sym_gt |
3754 |
106 |
|
#define sym_le |
3755 |
107 |
|
#define sym_ge |
3756 |
108 |
|
|
109 |
|
// Symbols for multiop operators. |
110 |
|
#define sym_comma |
3760 |
111 |
|
#define sym_logand |
3761 |
112 |
|
#define sym_logor |
3762 |
113 |
|
#define sym_bitand |
3763 |
114 |
|
#define sym_bitor |
3764 |
115 |
|
#define sym_bitxor |
3765 |
116 |
|
|
117 |
|
// Symbols for binary operators. |
118 |
|
#define sym_bitlsh |
3768 |
119 |
|
#define sym_bitrsh |
3769 |
120 |
|
#define sym_plus |
3780 |
121 |
|
#define sym_minus |
3781 |
122 |
|
#define sym_mul |
3782 |
123 |
|
#define sym_div |
3783 |
124 |
|
#define sym_rmnd |
3784 |
125 |
|
#define sym_dot |
3785 |
126 |
|
#define sym_arrow |
3786 |
127 |
|
#define sym_dotstar |
3787 |
128 |
|
#define sym_arrowstar |
3788 |
129 |
|
|
130 |
|
// Symbols for unary operators. |
131 |
|
#define sym_throw |
3800 |
132 |
|
#define sym_plusplus |
3801 |
133 |
|
#define sym_minusminus |
3802 |
134 |
|
#define sym_sizeof |
3803 |
135 |
|
#define sym_bang |
3804 |
136 |
|
#define sym_tilda |
3805 |
137 |
|
#define sym_typename |
3806 |
138 |
|
#define sym_const_cast |
3807 |
139 |
|
#define sym_dyna_cast |
3808 |
140 |
|
#define sym_rein_cast |
3809 |
141 |
|
#define sym_static_cast |
3810 |
142 |
|
#define sym_typeid |
3811 |
143 |
|
|
144 |
|
// New and delete related symbols. |
145 |
|
#define sym_dblcolon |
3830 |
146 |
|
#define sym_new |
3831 |
147 |
|
#define sym_delete |
3832 |
148 |
|
#define sym_lbracket |
3833 |
149 |
|
#define sym_rbracket |
3834 |
150 |
|
|
151 |
|
// Symbols for PrimaryExpr and Literal. |
152 |
|
#define sym_this |
3843 |
153 |
|
#define sym_false |
3844 |
154 |
|
#define sym_true |
3845 |
155 |
|
#define sym_number |
3846 |
156 |
|
#define sym_charconst |
3847 |
157 |
|
#define sym_string |
3848 |
158 |
|
|
159 |
|
// --------------------------------------------------- |
160 |
|
// |
161 |
|
// Non terminal symbol ids |
162 |
|
// |
163 |
|
// --------------------------------------------------- |
164 |
|
|
165 |
|
// |
166 |
|
// Cpp_01_Main.GRA |
167 |
|
// |
168 |
|
|
169 |
|
#define sym_TranslationUnit |
101 |
170 |
|
|
171 |
|
// |
172 |
|
// Cpp_02_Names.GRA |
173 |
|
// |
174 |
|
|
175 |
|
#define sym_SimpleOrQualifiedId |
201 |
176 |
|
#define sym_ExtendedId |
202 |
177 |
|
#define sym_ExpressionId |
203 |
178 |
|
#define sym_SpecialUnqualifiedId |
204 |
179 |
|
|
180 |
|
// |
181 |
|
// Cpp_03_Declarations.GRA |
182 |
|
// |
183 |
|
|
184 |
|
#define sym_DeclarationsSeq |
301 |
185 |
|
#define sym_Declaration |
302 |
186 |
|
#define sym_BlockDeclaration |
303 |
187 |
|
#define sym_SimpleDeclaration |
304 |
188 |
|
#define sym_DeclTypeSpecifier |
305 |
189 |
|
#define sym_DeclPrefix |
306 |
190 |
|
#define sym_FunctionSpecifier |
307 |
191 |
|
#define sym_StorageClassSpecifier |
308 |
192 |
|
#define sym_TypeSpecifier |
309 |
193 |
|
#define sym_SimpleTypeSpecifier |
310 |
194 |
|
#define sym_BuiltInTypeSpecifier |
311 |
195 |
|
#define sym_NamedTypeSpecifier |
312 |
196 |
|
#define sym_ElaboratedTypeSpecifier |
313 |
197 |
|
#define sym_UsingDeclaration |
314 |
198 |
|
#define sym_UsingDirective |
315 |
199 |
|
#define sym_AsmDefinition |
316 |
200 |
|
#define sym_LinkageSpecification |
317 |
201 |
|
#define sym_LinkageSpecHeader |
318 |
202 |
|
|
203 |
|
// |
204 |
|
// Cpp_04_Declarators.GRA |
205 |
|
// |
206 |
|
|
207 |
|
#define sym_InitDeclaratorsList |
401 |
208 |
|
#define sym_InitDeclarator |
402 |
209 |
|
#define sym_UninitedDeclarator |
403 |
210 |
|
#define sym_Declarator |
404 |
211 |
|
#define sym_DirectDeclarator |
405 |
212 |
|
#define sym_AbstractDeclarator |
406 |
213 |
|
#define sym_DirectAbstractDeclarator |
407 |
214 |
|
#define sym_PtrOperator |
408 |
215 |
|
#define sym_CvQualifier |
409 |
216 |
|
#define sym_ParameterDeclarationClause |
410 |
217 |
|
#define sym_ParameterDeclarationHeader |
411 |
218 |
|
#define sym_ParameterDeclarationsList |
412 |
219 |
|
#define sym_ParameterDeclaration |
413 |
220 |
|
#define sym_UninitedParameter |
414 |
221 |
|
#define sym_ExceptionsSpecification |
415 |
222 |
|
#define sym_ExceptionTypeIdsList |
416 |
223 |
|
#define sym_TypeId |
417 |
224 |
|
#define sym_Initializer |
418 |
225 |
|
#define sym_InitializerClause |
419 |
226 |
|
#define sym_InitializersList |
420 |
227 |
|
|
228 |
|
// |
229 |
|
// Cpp_05_Namespaces.GRA |
230 |
|
// |
231 |
|
|
232 |
|
#define sym_NamespaceDefinition |
501 |
233 |
|
#define sym_NamespaceHeader |
502 |
234 |
|
#define sym_NamespaceAliasDefinition |
503 |
235 |
|
|
236 |
|
// |
237 |
|
// Cpp_06_Enums.GRA |
238 |
|
// |
239 |
|
|
240 |
|
#define sym_EnumSpecifier |
601 |
241 |
|
#define sym_EnumeratorHeader |
602 |
242 |
|
#define sym_EnumeratorsList |
603 |
243 |
|
#define sym_EnumeratorDefinition |
604 |
244 |
|
|
245 |
|
// |
246 |
|
// Cpp_07_Classes.GRA |
247 |
|
// |
248 |
|
|
249 |
|
#define sym_ClassSpecifier |
701 |
250 |
|
#define sym_ClassHeader |
702 |
251 |
|
#define sym_ClassKey |
703 |
252 |
|
#define sym_MemberDeclarationsSeq |
704 |
253 |
|
#define sym_MemberDeclaration |
705 |
254 |
|
#define sym_AccessSpecifier |
706 |
255 |
|
#define sym_SimpleMemberDeclaration |
707 |
256 |
|
#define sym_MemberDeclaratorsList |
708 |
257 |
|
#define sym_MemberDeclarator |
709 |
258 |
|
#define sym_ConstantInitializer |
710 |
259 |
|
#define sym_BaseClassSpecifiersList |
711 |
260 |
|
#define sym_BaseClassSpecifier |
712 |
261 |
|
|
262 |
|
// |
263 |
|
// Cpp_08_Templates.GRA |
264 |
|
// |
265 |
|
|
266 |
|
#define sym_TemplateDeclaration |
801 |
267 |
|
#define sym_MemberTemplateDeclaration |
802 |
268 |
|
#define sym_TemplateDeclarationHeader |
803 |
269 |
|
#define sym_TemplateParamsListHeader |
804 |
270 |
|
#define sym_TemplateParametersList |
805 |
271 |
|
#define sym_TemplateParameter |
806 |
272 |
|
#define sym_TemplateTypeParameter |
807 |
273 |
|
#define sym_TemplateTemplateParameter |
808 |
274 |
|
#define sym_ExplicitInstantiation |
809 |
275 |
|
#define sym_MemberExplicitInstantiation |
810 |
276 |
|
#define sym_ExplicitInstantiationHeader |
811 |
277 |
|
#define sym_TemplateId |
812 |
278 |
|
#define sym_TemplateArgumentsList |
813 |
279 |
|
#define sym_TemplateArgument |
814 |
280 |
|
|
281 |
|
// |
282 |
|
// Cpp_09_Functions.GRA |
283 |
|
// |
284 |
|
|
285 |
|
#define sym_FunctionDefinition |
901 |
286 |
|
#define sym_FunctionHeader |
902 |
287 |
|
#define sym_MemberInitsList |
903 |
288 |
|
#define sym_MemberInitializer |
904 |
289 |
|
#define sym_OperatorFunctionId |
905 |
290 |
|
#define sym_OverloadableOperator |
906 |
291 |
|
#define sym_ConversionFunctionId |
907 |
292 |
|
#define sym_ConversionTypeId |
908 |
293 |
|
#define sym_ConversionDeclarator |
909 |
294 |
|
|
295 |
|
// |
296 |
|
// Cpp_10_Statements.GRA |
297 |
|
// |
298 |
|
|
299 |
|
#define sym_Statement |
1001 |
300 |
|
#define sym_CompoundStatement |
1002 |
301 |
|
#define sym_CompoundStatementHeader |
1003 |
302 |
|
#define sym_StatementsSeq |
1004 |
303 |
|
#define sym_LabeledStatement |
1005 |
304 |
|
#define sym_ExpressionStatement |
1006 |
305 |
|
#define sym_SelectionStatement |
1007 |
306 |
|
#define sym_IterationStatement |
1008 |
307 |
|
#define sym_ForInitStatement |
1009 |
308 |
|
#define sym_Condition |
1010 |
309 |
|
#define sym_UninitedCondition |
1011 |
310 |
|
#define sym_DoStatementBody |
1012 |
311 |
|
#define sym_JumpStatement |
1013 |
312 |
|
#define sym_TryBlock |
1014 |
313 |
|
#define sym_ExceptionHandlersSeq |
1015 |
314 |
|
#define sym_ExceptionHandler |
1016 |
315 |
|
#define sym_ExceptionHandlerHeader |
1017 |
316 |
|
|
317 |
|
// |
318 |
|
// Cpp_11_Expressions.GRA |
319 |
|
// |
320 |
|
|
321 |
|
#define sym_ExpressionsList |
1101 |
322 |
|
#define sym_Expression |
1102 |
323 |
|
#define sym_AssignmentExpression |
1103 |
324 |
|
#define sym_AssignmentOperator |
1104 |
325 |
|
|
326 |
|
#define sym_ThrowExpression |
1105 |
327 |
|
#define sym_ConstantExpressionsList |
1106 |
328 |
|
#define sym_ConstantExpression |
1107 |
329 |
|
#define sym_ConditionalExpression |
1108 |
330 |
|
#define sym_LogicalOrExpression |
1109 |
331 |
|
#define sym_LogicalAndExpression |
1110 |
332 |
|
#define sym_BitOrExpression |
1111 |
333 |
|
#define sym_BitXorExpression |
1112 |
334 |
|
#define sym_BitAndExpression |
1113 |
335 |
|
#define sym_EqualityExpression |
1114 |
336 |
|
#define sym_RelationalExpression |
1115 |
337 |
|
#define sym_ShiftExpression |
1116 |
338 |
|
#define sym_AdditiveExpression |
1117 |
339 |
|
#define sym_MultiplicativeExpression |
1118 |
340 |
|
#define sym_PmExpression |
1119 |
341 |
|
|
342 |
|
#define sym_CastExpression |
1120 |
343 |
|
#define sym_UnaryExpression |
1121 |
344 |
|
#define sym_UnaryOperator |
1122 |
345 |
|
#define sym_NewExpression |
1123 |
346 |
|
#define sym_NewPlacement |
1124 |
347 |
|
#define sym_NewTypeId |
1125 |
348 |
|
#define sym_NewDeclarator |
1126 |
349 |
|
#define sym_DirectNewDeclarator |
1127 |
350 |
|
#define sym_NewInitializer |
1128 |
351 |
|
#define sym_DeleteExpression |
1129 |
352 |
|
#define sym_PostfixExpression |
1130 |
353 |
|
#define sym_PrimaryExpression |
1131 |
354 |
|
#define sym_Literal |
1132 |
355 |
|
#define sym_StringsSeq |
1133 |
356 |
|
|
357 |
|
#define rcpp_pfix_plpl |
1160 |
358 |
|
#define rcpp_pfix_mnmn |
1161 |
359 |
|
#define rcpp_pfix_dot |
1162 |
360 |
|
#define rcpp_pfix_dot_tmpl |
1163 |
361 |
|
#define rcpp_pfix_arrow |
1164 |
362 |
|
#define rcpp_pfix_arrow_tmpl |
1165 |
363 |
|
#define rcpp_pfix_array |
1166 |
364 |
|
#define rcpp_pfix_fcall_simp |
1167 |
365 |
|
#define rcpp_pfix_fcall_prms |
1168 |
366 |
|
#define rcpp_pfix_ctor1 |
1169 |
367 |
|
#define rcpp_pfix_ctor2 |
1170 |
368 |
|
#define rcpp_pfix_ctor3 |
1171 |
369 |
|
#define rcpp_pfix_ctor4 |
1172 |
370 |
|
#define rcpp_pfix_cs_cast |
1173 |
371 |
|
#define rcpp_pfix_st_cast |
1174 |
372 |
|
#define rcpp_pfix_dy_cast |
1175 |
373 |
|
#define rcpp_pfix_re_cast |
1176 |
374 |
|
#define rcpp_pfix_tpid_expr |
1177 |
375 |
|
#define rcpp_pfix_tpid_type |
1178 |
376 |
|
|
377 |
|
// ------------------------------------------------------------- |
378 |
|
// |
379 |
|
// Expected conflict ids |
380 |
|
// |
381 |
|
// ------------------------------------------------------------- |
383 |
|
#define xpct_ExpressionId_OR_NamedTypeSpecifier |
7400 |
// X0 |
384 |
|
#define xpct_SimpleTypeSpec_OR_TypeSpecifier |
7401 |
// X1 |
385 |
|
#define xpct_DirectDeclarator_OR_PrimaryExpression |
7402 |
// X2 |
386 |
|
#define xpct_PtrStar_OR_UnaryStar |
7403 |
// X3 |
387 |
|
#define xpct_RefAmpersand_OR_UnaryAmpersand |
7404 |
// X4 |
388 |
|
#define xpct_Qual_OR_MoreQual |
7405 |
// X5 |
389 |
|
#define xpct_Declarator_OR_ParameterDeclaration |
7406 |
// X6 |
390 |
|
#define xpct_ElabTypeSpec_OR_PostfixExpression |
7407 |
// X7 |
391 |
|
#define xpct_MemberDecl_OR_FunctionDefn |
7408 |
// X8 |
392 |
|
|
393 |
|
#define xpct_EnumHeader_OR_AlignmentRecord |
7409 |
// X9 |
394 |
|
#define xpct_ExtendedId_OR_ClassHeader |
7410 |
// X10 |
395 |
|
#define xpct_NewWithArrayIndex_OR_NewArray |
7411 |
// X11 |
396 |
|
#define xpct_DeleteWithArrayIndex_OR_DeleteArray |
7412 |
// X12 |
397 |
|
#define xpct_ExtendedId_OR_TemplateParams |
7413 |
// X13 |
398 |
|
#define xpct_OperatorFuncId_OR_TemplateParams |
7414 |
// X14 |
399 |
|
#define xpct_ConversionFuncId_OR_TemplateParams |
7415 |
// X15 |
400 |
|
|
401 |
|
#define xpct_Destructor_OR_UnaryTilda |
7416 |
// X16 |
402 |
|
#define xpct_ClassKey_OR_TypeParameter |
7417 |
// X17 |
403 |
|
#define xpct_RelationalExpr_OR_TemplateIdDataArg |
7418 |
// X18 |
404 |
|
#define xpct_EnumHeader_OR_FunctionDefn |
7419 |
// X19 |
405 |
|
#define xpct_ClassHeader_OR_ConversionFuncHeader |
7420 |
// X20 |
406 |
|
|
407 |
|
#define xpct_PtrOperator_OR_ConversionTypeId |
7421 |
// X21 |
408 |
|
#define xpct_PtrOperator_OR_NewTypeId |
7422 |
// X22 |
409 |
|
#define xpct_PtrOperator_OR_NewDeclarator |
7423 |
// X23 |
410 |
|
#define xpct_RefOperator_OR_ConversionTypeId |
7424 |
// X24 |
411 |
|
#define xpct_RefOperator_OR_NewTypeId |
7425 |
// X25 |
412 |
|
#define xpct_RefOperator_OR_NewDeclarator |
7426 |
// X26 |
413 |
|
|
414 |
|
#define xpct_TypeParameter_OR_DataParameter |
7427 |
// X27 |
415 |
|
#define xpct_ParamsHeader_OR_EnclosedDeclarator |
7428 |
// X28 |
416 |
|
#define xpct_BigElse_OR_SmallElse |
7429 |
// X29 |
417 |
|
|
418 |
|
// ------------------------------------------------------------- |
419 |
|
// |
420 |
|
// Misc rule ids |
421 |
|
// |
422 |
|
// ------------------------------------------------------------- |
424 |
|
#define rcpp_X8A1 |
8801 |
425 |
|
#define rcpp_DirDeclDecl |
8802 |
426 |
|
#define rcpp_PtrOpStar |
8803 |
427 |
|
#define rcpp_UnOpStar |
8804 |
428 |
|
|
429 |
|
#endif // Grammars_CppAppIds_H |
430 |
|
|
431 |
|
|
1 |
|
// |
2 |
|
// Even C++ Grammar. Close to the Standard ISO/IEC 14882. |
3 |
|
// |
4 |
|
// Terminal symbols and grammar info. |
5 |
|
// |
6 |
|
|
7 |
|
|
8 |
|
|
9 |
|
Cpp, |
// Target language type. |
10 |
|
"TCppParser", |
// Name of the grammar based parser callback handler. |
11 |
|
"Cpp_Lang"; |
// Preferred prefix for emitting the .cxx tables. |
12 |
|
|
13 |
|
|
14 |
|
|
15 |
|
"Even Cpp Grammar. Close to the C++ 2003 standard."; |
16 |
|
|
17 |
|
|
18 |
|
|
19 |
1 |
number: |
ltx_number |
__id(sym_number); |
20 |
2 |
charconst: |
ltx_charconst |
__id(sym_charconst); |
21 |
3 |
string: |
ltx_string |
__id(sym_string); |
22 |
4 |
identifier: |
ltx_name |
__id(sym_identifier); |
23 |
|
|
24 |
|
// TSeparToken |
25 |
5 |
'{': |
ltx_keyword |
spr_lcurvbr |
__id(sym_lcurvbr); |
26 |
6 |
'}': |
ltx_keyword |
spr_rcurvbr |
__id(sym_rcurvbr); |
27 |
7 |
';': |
ltx_keyword |
spr_semicol |
__id(sym_semicol); |
28 |
8 |
'...': |
ltx_keyword |
spr_ellipsis |
__id(sym_ellipsis); |
29 |
|
|
30 |
|
// TOperatorToken |
31 |
9 |
',': |
ltx_keyword |
opr_comma |
__id(sym_comma); |
32 |
10 |
'(': |
ltx_keyword |
opr_lpar |
__id(sym_lpar); |
33 |
11 |
')': |
ltx_keyword |
opr_rpar |
__id(sym_rpar); |
34 |
12 |
'!': |
ltx_keyword |
opr_bang |
__id(sym_bang); |
35 |
13 |
'~': |
ltx_keyword |
opr_tilda |
__id(sym_tilda); |
36 |
|
|
37 |
14 |
'*': |
ltx_keyword |
opr_mul |
__id(sym_mul); |
38 |
15 |
'/': |
ltx_keyword |
opr_div |
__id(sym_div); |
39 |
16 |
'%': |
ltx_keyword |
opr_rmnd |
__id(sym_rmnd); |
40 |
17 |
'+': |
ltx_keyword |
opr_plus |
__id(sym_plus); |
41 |
18 |
'-': |
ltx_keyword |
opr_minus |
__id(sym_minus); |
42 |
19 |
'<<': |
ltx_keyword |
opr_bitlsh |
__id(sym_bitlsh); |
43 |
20 |
'>>': |
ltx_keyword |
opr_bitrsh |
__id(sym_bitrsh); |
44 |
21 |
'&': |
ltx_keyword |
opr_bitand |
__id(sym_bitand); |
45 |
22 |
'|': |
ltx_keyword |
opr_bitor |
__id(sym_bitor); |
46 |
23 |
'^': |
ltx_keyword |
opr_bitxor |
__id(sym_bitxor); |
47 |
|
|
48 |
24 |
'<': |
ltx_keyword |
opr_lt |
__id(sym_lt); |
49 |
25 |
'<=': |
ltx_keyword |
opr_le |
__id(sym_le); |
50 |
26 |
'>': |
ltx_keyword |
opr_gt |
__id(sym_gt); |
51 |
27 |
'>=': |
ltx_keyword |
opr_ge |
__id(sym_ge); |
52 |
28 |
'==': |
ltx_keyword |
opr_eq |
__id(sym_eq); |
53 |
29 |
'!=': |
ltx_keyword |
opr_ne |
__id(sym_ne); |
54 |
30 |
'&&': |
ltx_keyword |
opr_logand |
__id(sym_logand); |
55 |
31 |
'||': |
ltx_keyword |
opr_logor |
__id(sym_logor); |
56 |
32 |
'?': |
ltx_keyword |
opr_question |
__id(sym_question); |
57 |
33 |
':': |
ltx_keyword |
opr_colon |
__id(sym_colon); |
58 |
|
|
59 |
34 |
'::': |
ltx_keyword |
opr_dblcolon |
__id(sym_dblcolon); |
60 |
35 |
'.': |
ltx_keyword |
opr_dot |
__id(sym_dot); |
61 |
36 |
'->': |
ltx_keyword |
opr_arrow |
__id(sym_arrow); |
62 |
37 |
'.*': |
ltx_keyword |
opr_dotstar |
__id(sym_dotstar); |
63 |
38 |
'->*': |
ltx_keyword |
opr_arrowstar |
__id(sym_arrowstar); |
64 |
39 |
'[': |
ltx_keyword |
opr_lbracket |
__id(sym_lbracket); |
65 |
40 |
']': |
ltx_keyword |
opr_rbracket |
__id(sym_rbracket); |
66 |
41 |
'++': |
ltx_keyword |
opr_plusplus |
__id(sym_plusplus); |
67 |
42 |
'--': |
ltx_keyword |
opr_minusminus |
__id(sym_minusminus); |
68 |
|
|
69 |
43 |
SIZEOF: |
ltx_keyword |
opr_sizeof |
__id(sym_sizeof); |
70 |
44 |
NEW: |
ltx_keyword |
opr_new |
__id(sym_new); |
71 |
45 |
DELETE: |
ltx_keyword |
opr_delete |
__id(sym_delete); |
72 |
|
|
73 |
46 |
THROW: |
ltx_keyword |
opr_throw |
__id(sym_throw); |
74 |
47 |
TYPEID: |
ltx_keyword |
opr_typeid |
__id(sym_typeid); |
75 |
48 |
CONST_CAST: |
ltx_keyword |
opr_const_cast |
__id(sym_const_cast); |
76 |
49 |
DYNA_CAST: |
ltx_keyword |
opr_dyna_cast |
__id(sym_dyna_cast); |
77 |
50 |
REIN_CAST: |
ltx_keyword |
opr_rein_cast |
__id(sym_rein_cast); |
78 |
51 |
STATIC_CAST: |
ltx_keyword |
opr_static_cast |
__id(sym_static_cast); |
79 |
|
|
80 |
52 |
'=': |
ltx_keyword |
opr_assign |
__id(sym_assign); |
81 |
53 |
'*=': |
ltx_keyword |
opr_mul_asgn |
__id(sym_mul_asgn); |
82 |
54 |
'/=': |
ltx_keyword |
opr_div_asgn |
__id(sym_div_asgn); |
83 |
55 |
'%=': |
ltx_keyword |
opr_rmnd_asgn |
__id(sym_rmnd_asgn); |
84 |
56 |
'+=': |
ltx_keyword |
opr_plus_asgn |
__id(sym_plus_asgn); |
85 |
57 |
'-=': |
ltx_keyword |
opr_minus_asgn |
__id(sym_minus_asgn); |
86 |
58 |
'<<=': |
ltx_keyword |
opr_lsh_asgn |
__id(sym_lsh_asgn); |
87 |
59 |
'>>=': |
ltx_keyword |
opr_rsh_asgn |
__id(sym_rsh_asgn); |
88 |
60 |
'&=': |
ltx_keyword |
opr_btand_asgn |
__id(sym_btand_asgn); |
89 |
61 |
'|=': |
ltx_keyword |
opr_btor_asgn |
__id(sym_btor_asgn); |
90 |
62 |
'^=': |
ltx_keyword |
opr_btxor_asgn |
__id(sym_btxor_asgn); |
91 |
|
|
92 |
|
// TCLangToken |
93 |
63 |
ASM: |
ltx_keyword |
clg_asm |
__id(sym_asm); |
94 |
64 |
AUTO: |
ltx_keyword |
clg_auto |
__id(sym_auto); |
95 |
65 |
BREAK: |
ltx_keyword |
clg_break |
__id(sym_break); |
96 |
66 |
CASE: |
ltx_keyword |
clg_case |
__id(sym_case); |
97 |
67 |
CATCH: |
ltx_keyword |
clg_catch |
__id(sym_catch); |
98 |
68 |
CHAR: |
ltx_keyword |
clg_char |
__id(sym_char); |
99 |
69 |
CONST: |
ltx_keyword |
clg_const |
__id(sym_const); |
100 |
70 |
CONTINUE: |
ltx_keyword |
clg_continue |
__id(sym_continue); |
101 |
71 |
DEFAULT: |
ltx_keyword |
clg_default |
__id(sym_default); |
102 |
72 |
DO: |
ltx_keyword |
clg_do |
__id(sym_do); |
103 |
73 |
DOUBLE: |
ltx_keyword |
clg_double |
__id(sym_double); |
104 |
74 |
ELSE: |
ltx_keyword |
clg_else |
__id(sym_else); |
105 |
75 |
ENUM: |
ltx_keyword |
clg_enum |
__id(sym_enum); |
106 |
76 |
EXTERN: |
ltx_keyword |
clg_extern |
__id(sym_extern); |
107 |
77 |
FLOAT: |
ltx_keyword |
clg_float |
__id(sym_float); |
108 |
78 |
FOR: |
ltx_keyword |
clg_for |
__id(sym_for); |
109 |
79 |
GOTO: |
ltx_keyword |
clg_goto |
__id(sym_goto); |
110 |
80 |
IF: |
ltx_keyword |
clg_if |
__id(sym_if); |
111 |
81 |
INT: |
ltx_keyword |
clg_int |
__id(sym_int); |
112 |
82 |
LONG: |
ltx_keyword |
clg_long |
__id(sym_long); |
113 |
83 |
REGISTER: |
ltx_keyword |
clg_register |
__id(sym_register); |
114 |
84 |
RETURN: |
ltx_keyword |
clg_return |
__id(sym_return); |
115 |
85 |
SHORT: |
ltx_keyword |
clg_short |
__id(sym_short); |
116 |
86 |
SIGNED: |
ltx_keyword |
clg_signed |
__id(sym_signed); |
117 |
87 |
STATIC: |
ltx_keyword |
clg_static |
__id(sym_static); |
118 |
88 |
STRUCT: |
ltx_keyword |
clg_struct |
__id(sym_struct); |
119 |
89 |
SWITCH: |
ltx_keyword |
clg_switch |
__id(sym_switch); |
120 |
90 |
TRY: |
ltx_keyword |
clg_try |
__id(sym_try); |
121 |
91 |
TYPEDEF: |
ltx_keyword |
clg_typedef |
__id(sym_typedef); |
122 |
92 |
UNION: |
ltx_keyword |
clg_union |
__id(sym_union); |
123 |
93 |
UNSIGNED: |
ltx_keyword |
clg_unsigned |
__id(sym_unsigned); |
124 |
94 |
VOID: |
ltx_keyword |
clg_void |
__id(sym_void); |
125 |
95 |
VOLATILE: |
ltx_keyword |
clg_volatile |
__id(sym_volatile); |
126 |
96 |
WCHAR: |
ltx_keyword |
clg_wchar_t |
__id(sym_wchar); |
127 |
97 |
WHILE: |
ltx_keyword |
clg_while |
__id(sym_while); |
128 |
|
|
129 |
|
// TCppToken |
130 |
98 |
BOOL: |
ltx_keyword |
cpp_bool |
__id(sym_bool); |
131 |
99 |
CLASS: |
ltx_keyword |
cpp_class |
__id(sym_class); |
132 |
100 |
EXPLICIT: |
ltx_keyword |
cpp_explicit |
__id(sym_explicit); |
133 |
101 |
EXPORT: |
ltx_keyword |
cpp_export |
__id(sym_export); |
134 |
102 |
FALSE: |
ltx_keyword |
cpp_false |
__id(sym_false); |
135 |
103 |
FRIEND: |
ltx_keyword |
cpp_friend |
__id(sym_friend); |
136 |
104 |
INLINE: |
ltx_keyword |
cpp_inline |
__id(sym_inline); |
137 |
105 |
MUTABLE: |
ltx_keyword |
cpp_mutable |
__id(sym_mutable); |
138 |
106 |
NAMESPACE: |
ltx_keyword |
cpp_namespace |
__id(sym_namespace); |
139 |
107 |
OPERATOR: |
ltx_keyword |
cpp_operator |
__id(sym_operator); |
140 |
108 |
PRIVATE: |
ltx_keyword |
cpp_private |
__id(sym_private); |
141 |
109 |
PROTECTED: |
ltx_keyword |
cpp_protected |
__id(sym_protected); |
142 |
110 |
PUBLIC: |
ltx_keyword |
cpp_public |
__id(sym_public); |
143 |
111 |
TEMPLATE: |
ltx_keyword |
cpp_template |
__id(sym_template); |
144 |
112 |
THIS: |
ltx_keyword |
cpp_this |
__id(sym_this); |
145 |
113 |
TRUE: |
ltx_keyword |
cpp_true |
__id(sym_true); |
146 |
114 |
TYPENAME: |
ltx_keyword |
cpp_typename |
__id(sym_typename); |
147 |
115 |
USING: |
ltx_keyword |
cpp_using |
__id(sym_using); |
148 |
116 |
VIRTUAL: |
ltx_keyword |
cpp_virtual |
__id(sym_virtual); |
149 |
|
|
150 |
|
|
151 |
|
|
152 |
|
ltx_comment; |
153 |
|
ltx_eol; |
154 |
|
|
155 |
|
|
1 |
|
// |
2 |
|
// Cpp-02. Names. |
3 |
|
// |
4 |
|
|
5 |
|
|
6 |
|
|
7 |
|
public SimpleOrQualifiedId, ExpressionId; |
8 |
|
|
9 |
4001 |
SimpleOrQualifiedId |
10 |
R1 |
: ExtendedId |
11 |
R2 |
: [phed2] '::' ExtendedId |
12 |
R3 |
: SimpleOrQualifiedId [qmq1, qmq2, qmq3, qmq4] '::' ExtendedId |
13 |
R4 |
: SimpleOrQualifiedId [qmq1, qmq2, qmq3, qmq4] '::' TEMPLATE ExtendedId |
14 |
|
; |
15 |
|
|
16 |
4002 |
ExtendedId |
17 |
R5 |
: [phed1] identifier [mdfd-':' eitp-'<', tdp1-'=', tdp2-',', tdp3-'>'] __id(rcpp_X8A1) |
18 |
R6 |
: TemplateId |
19 |
|
; |
20 |
|
|
21 |
4003 |
ExpressionId |
22 |
R7 |
: SimpleOrQualifiedId [est1-';', est2-'...', est3-',', est4-'(', est5-')', est6-'*', est7-'&', est8-'>', est9-':', est10-'[', est11-'='] |
23 |
R8 |
: SpecialUnqualifiedId |
24 |
R9 |
: '::' OperatorFunctionId |
25 |
R10 |
: '::' ConversionFunctionId |
26 |
R11 |
: SimpleOrQualifiedId [qmq1*] '::' SpecialUnqualifiedId |
27 |
R12 |
: SimpleOrQualifiedId [qmq1*] '::' TEMPLATE SpecialUnqualifiedId |
28 |
|
; |
29 |
|
|
30 |
4004 |
SpecialUnqualifiedId |
31 |
R13 |
: '~' [dsut] identifier |
32 |
R14 |
: OperatorFunctionId |
33 |
R15 |
: ConversionFunctionId |
34 |
|
; |
35 |
|
|
36 |
|
|
1 |
|
// |
2 |
|
// Cpp-03. Declarations. |
3 |
|
// |
4 |
|
|
5 |
|
|
6 |
|
|
7 |
|
public DeclarationsSeq, Declaration; |
8 |
|
public BlockDeclaration, SimpleDeclaration; |
9 |
|
public DeclTypeSpecifier, TypeSpecifier, SimpleTypeSpecifier; |
10 |
|
public UsingDeclaration; |
11 |
|
|
12 |
4005 |
DeclarationsSeq |
13 |
R16 |
: Declaration |
14 |
R17 |
: DeclarationsSeq Declaration |
15 |
|
; |
16 |
|
|
17 |
4006 |
Declaration |
18 |
R18 |
: NamespaceDefinition |
19 |
R19 |
: BlockDeclaration |
20 |
R20 |
: FunctionDefinition |
21 |
R21 |
: TemplateDeclaration |
22 |
R22 |
: ExplicitInstantiation |
23 |
R23 |
: LinkageSpecification |
24 |
|
; |
25 |
|
|
26 |
4007 |
BlockDeclaration |
27 |
R24 |
: SimpleDeclaration |
28 |
R25 |
: NamespaceAliasDefinition |
29 |
R26 |
: UsingDeclaration |
30 |
R27 |
: UsingDirective |
31 |
R28 |
: AsmDefinition |
32 |
|
; |
33 |
|
|
34 |
4008 |
SimpleDeclaration |
35 |
R29 |
: ';' |
36 |
R30 |
: InitDeclaratorsList ';' // All declarators in this rule should be overloaded conversions. |
37 |
R31 |
: DeclTypeSpecifier ';' // DeclTypeSpecifier in this rule should be either enum or class. |
38 |
R32 |
: DeclTypeSpecifier InitDeclaratorsList ';' |
39 |
|
; |
40 |
|
|
41 |
4009 |
DeclTypeSpecifier |
42 |
R33 |
: DeclPrefix |
43 |
R34 |
: FunctionSpecifier |
44 |
R35 |
: StorageClassSpecifier |
45 |
|
/*+*/ |
46 |
R36 |
: CONST |
47 |
R37 |
: VOLATILE |
48 |
R38 |
: BuiltInTypeSpecifier [dsb1-identifier, dsb2-'(', dsb3-'::', dsb4-CHAR, dsb5-DOUBLE, dsb6-FLOAT, dsb7-INT, dsb8-LONG] |
49 |
|
[dsb9-SHORT, dsb10-SIGNED, dsb11-UNSIGNED, dsb12-VOID, dsb13-WCHAR, dsb14-BOOL, dsb15-TYPENAME] |
50 |
R39 |
: NamedTypeSpecifier [dsn1-identifier, dsn2-'(', dsn3-'::', dsn4-CHAR, dsn5-DOUBLE, dsn6-FLOAT, dsn7-INT, dsn8-LONG] |
51 |
|
[dsn9-SHORT, dsn10-SIGNED, dsn11-UNSIGNED, dsn12-VOID, dsn13-WCHAR, dsn14-BOOL, dsn15-TYPENAME] |
52 |
|
/*+*/ |
53 |
R40 |
: ElaboratedTypeSpecifier |
54 |
R41 |
: EnumSpecifier |
55 |
R42 |
: ClassSpecifier |
56 |
|
/*+*/ |
57 |
R43 |
: DeclTypeSpecifier DeclPrefix |
58 |
R44 |
: DeclTypeSpecifier FunctionSpecifier |
59 |
R45 |
: DeclTypeSpecifier StorageClassSpecifier |
60 |
|
/*+*/ |
61 |
R46 |
: DeclTypeSpecifier CONST |
62 |
R47 |
: DeclTypeSpecifier VOLATILE |
63 |
R48 |
: DeclTypeSpecifier BuiltInTypeSpecifier |
64 |
R49 |
: DeclTypeSpecifier NamedTypeSpecifier |
65 |
|
/*+*/ |
66 |
R50 |
: DeclTypeSpecifier ElaboratedTypeSpecifier |
67 |
R51 |
: DeclTypeSpecifier EnumSpecifier |
68 |
R52 |
: DeclTypeSpecifier ClassSpecifier |
69 |
|
; |
70 |
|
|
71 |
4010 |
DeclPrefix |
72 |
R53 |
: TYPEDEF |
73 |
R54 |
: FRIEND |
74 |
|
; |
75 |
|
|
76 |
4011 |
FunctionSpecifier |
77 |
R55 |
: INLINE |
78 |
R56 |
: VIRTUAL |
79 |
R57 |
: EXPLICIT |
80 |
|
; |
81 |
|
|
82 |
4012 |
StorageClassSpecifier |
83 |
R58 |
: REGISTER |
84 |
R59 |
: AUTO |
85 |
R60 |
: STATIC |
86 |
R61 |
: EXTERN |
87 |
R62 |
: MUTABLE |
88 |
|
; |
89 |
|
|
90 |
4013 |
TypeSpecifier |
91 |
R63 |
: CONST |
92 |
R64 |
: VOLATILE |
93 |
R65 |
: BuiltInTypeSpecifier [tsb1-identifier, tsb2-'(', tsb3-'::', tsb4-CHAR, tsb5-DOUBLE, tsb6-FLOAT, tsb7-INT, tsb8-LONG] |
94 |
|
[tsb9-SHORT, tsb10-SIGNED, tsb11-UNSIGNED, tsb12-VOID, tsb13-WCHAR, tsb14-BOOL, tsb15-TYPENAME] |
95 |
R66 |
: NamedTypeSpecifier [tsn1-identifier, tsn2-'(', tsn3-'::', tsn4-CHAR, tsn5-DOUBLE, tsn6-FLOAT, tsn7-INT, tsn8-LONG] |
96 |
|
[tsn9-SHORT, tsn10-SIGNED, tsn11-UNSIGNED, tsn12-VOID, tsn13-WCHAR, tsn14-BOOL, tsn15-TYPENAME] |
97 |
|
/*+*/ |
98 |
R67 |
: ElaboratedTypeSpecifier |
99 |
R68 |
: EnumSpecifier |
100 |
R69 |
: ClassSpecifier |
101 |
|
/*+*/ |
102 |
R70 |
: TypeSpecifier CONST |
103 |
R71 |
: TypeSpecifier VOLATILE |
104 |
R72 |
: TypeSpecifier BuiltInTypeSpecifier |
105 |
R73 |
: TypeSpecifier NamedTypeSpecifier |
106 |
|
/*+*/ |
107 |
R74 |
: TypeSpecifier ElaboratedTypeSpecifier |
108 |
R75 |
: TypeSpecifier EnumSpecifier |
109 |
R76 |
: TypeSpecifier ClassSpecifier |
110 |
|
; |
111 |
|
|
112 |
4014 |
SimpleTypeSpecifier |
113 |
R77 |
: BuiltInTypeSpecifier [dsb1-identifier, dsb2-'(', dsb3-'::', dsb4-CHAR, dsb5-DOUBLE, dsb6-FLOAT, dsb7-INT, dsb8-LONG] |
114 |
|
[dsb9-SHORT, dsb10-SIGNED, dsb11-UNSIGNED, dsb12-VOID, dsb13-WCHAR, dsb14-BOOL, dsb15-TYPENAME] |
115 |
|
[tsb1-identifier, tsb2-'(', tsb3-'::', tsb4-CHAR, tsb5-DOUBLE, tsb6-FLOAT, tsb7-INT, tsb8-LONG] |
116 |
|
[tsb9-SHORT, tsb10-SIGNED, tsb11-UNSIGNED, tsb12-VOID, tsb13-WCHAR, tsb14-BOOL, tsb15-TYPENAME] |
117 |
R78 |
: NamedTypeSpecifier [dsn1-identifier, dsn2-'(', dsn3-'::', dsn4-CHAR, dsn5-DOUBLE, dsn6-FLOAT, dsn7-INT, dsn8-LONG] |
118 |
|
[dsn9-SHORT, dsn10-SIGNED, dsn11-UNSIGNED, dsn12-VOID, dsn13-WCHAR, dsn14-BOOL, dsn15-TYPENAME] |
119 |
|
[tsn1-identifier, tsn2-'(', tsn3-'::', tsn4-CHAR, tsn5-DOUBLE, tsn6-FLOAT, tsn7-INT, tsn8-LONG] |
120 |
|
[tsn9-SHORT, tsn10-SIGNED, tsn11-UNSIGNED, tsn12-VOID, tsn13-WCHAR, tsn14-BOOL, tsn15-TYPENAME] |
121 |
|
/*+*/ |
122 |
R79 |
: SimpleTypeSpecifier BuiltInTypeSpecifier |
123 |
R80 |
: SimpleTypeSpecifier NamedTypeSpecifier |
124 |
|
; |
125 |
|
|
126 |
4015 |
BuiltInTypeSpecifier |
127 |
R81 |
: VOID |
128 |
R82 |
: BOOL |
129 |
R83 |
: CHAR |
130 |
R84 |
: WCHAR |
131 |
R85 |
: SHORT |
132 |
R86 |
: INT |
133 |
R87 |
: LONG |
134 |
R88 |
: SIGNED |
135 |
R89 |
: UNSIGNED |
136 |
R90 |
: FLOAT |
137 |
R91 |
: DOUBLE |
138 |
|
; |
139 |
|
|
140 |
4016 |
NamedTypeSpecifier |
141 |
R92 |
: SimpleOrQualifiedId [qmq1-'::', est1-';', est2-'...', est3-',', est4-'(', est5-')'] |
142 |
|
[est6-'*', est7-'&', est8-'>', est9-':', est10-'[', est11-'='] |
143 |
R93 |
: TYPENAME SimpleOrQualifiedId [qmq4-'::', etpe-'('] |
144 |
|
; |
145 |
|
|
146 |
4017 |
ElaboratedTypeSpecifier |
147 |
R94 |
: ENUM SimpleOrQualifiedId [qmq2-'::', ehar-':', ehfd-'{'] |
148 |
R95 |
: ClassKey SimpleOrQualifiedId [qmq3-'::', eich-':', chfd-'{'] |
149 |
|
; |
150 |
|
|
151 |
4018 |
UsingDeclaration |
152 |
R96 |
: USING ExpressionId ';' |
153 |
R97 |
: USING TYPENAME ExpressionId ';' |
154 |
|
; |
155 |
|
|
156 |
4019 |
UsingDirective |
157 |
R98 |
: USING NAMESPACE SimpleOrQualifiedId ';' |
158 |
|
; |
159 |
|
|
160 |
4020 |
AsmDefinition |
161 |
R99 |
: ASM '(' StringsSeq ')' ';' |
162 |
|
; |
163 |
|
|
164 |
4021 |
LinkageSpecification |
165 |
R100 |
: LinkageSpecHeader '{' '}' |
166 |
R101 |
: LinkageSpecHeader '{' DeclarationsSeq '}' |
167 |
R102 |
: LinkageSpecHeader Declaration |
168 |
|
; |
169 |
|
|
170 |
4022 |
LinkageSpecHeader |
171 |
R103 |
: EXTERN StringsSeq |
172 |
|
; |
173 |
|
|
174 |
|
|
1 |
|
// |
2 |
|
// Cpp-04. Declarators. |
3 |
|
// |
4 |
|
|
5 |
|
|
6 |
|
|
7 |
|
public InitDeclaratorsList, Declarator, AbstractDeclarator; |
8 |
|
public PtrOperator, ParameterDeclaration, TypeId; |
9 |
|
|
10 |
4023 |
InitDeclaratorsList |
11 |
R104 |
: InitDeclarator |
12 |
R105 |
: InitDeclaratorsList ',' InitDeclarator |
13 |
|
; |
14 |
|
|
15 |
4024 |
InitDeclarator |
16 |
R106 |
: UninitedDeclarator |
17 |
R107 |
: UninitedDeclarator Initializer |
18 |
|
; |
19 |
|
|
20 |
4025 |
UninitedDeclarator |
21 |
R108 |
: Declarator |
22 |
|
; |
23 |
|
|
24 |
4026 |
Declarator |
25 |
R109 |
: DirectDeclarator [dpdc-'('] __id(rcpp_DirDeclDecl) |
26 |
R110 |
: PtrOperator Declarator |
27 |
|
; |
28 |
|
|
29 |
4027 |
DirectDeclarator |
30 |
R111 |
: ExpressionId [dpe1-';', dpe2-',', dpe3-'(', dpe4-')', dpe5-'[', dpe6-'='] |
31 |
|
/*+*/ |
32 |
R112 |
: DirectDeclarator '[' ']' |
33 |
R113 |
: DirectDeclarator '[' ConstantExpressionsList ']' |
34 |
|
/*+*/ |
35 |
R114 |
: DirectDeclarator ParameterDeclarationClause |
36 |
R115 |
: DirectDeclarator ParameterDeclarationClause ExceptionsSpecification |
37 |
R116 |
: DirectDeclarator ParameterDeclarationClause CvQualifier |
38 |
R117 |
: DirectDeclarator ParameterDeclarationClause CvQualifier ExceptionsSpecification |
39 |
|
/*+*/ |
40 |
R118 |
: '(' Declarator ')' |
41 |
|
; |
42 |
|
|
43 |
4028 |
AbstractDeclarator |
44 |
R119 |
: DirectAbstractDeclarator |
45 |
R120 |
: PtrOperator |
46 |
R121 |
: PtrOperator AbstractDeclarator |
47 |
|
; |
48 |
|
|
49 |
4029 |
DirectAbstractDeclarator |
50 |
R122 |
: '[' ']' |
51 |
R123 |
: '[' ConstantExpressionsList ']' |
52 |
R124 |
: DirectAbstractDeclarator '[' ']' |
53 |
R125 |
: DirectAbstractDeclarator '[' ConstantExpressionsList ']' |
54 |
|
/*+*/ |
55 |
R126 |
: ParameterDeclarationClause |
56 |
R127 |
: ParameterDeclarationClause ExceptionsSpecification |
57 |
R128 |
: ParameterDeclarationClause CvQualifier |
58 |
R129 |
: ParameterDeclarationClause CvQualifier ExceptionsSpecification |
59 |
R130 |
: DirectAbstractDeclarator ParameterDeclarationClause |
60 |
R131 |
: DirectAbstractDeclarator ParameterDeclarationClause ExceptionsSpecification |
61 |
R132 |
: DirectAbstractDeclarator ParameterDeclarationClause CvQualifier |
62 |
R133 |
: DirectAbstractDeclarator ParameterDeclarationClause CvQualifier ExceptionsSpecification |
63 |
|
/*+*/ |
64 |
R134 |
: '(' AbstractDeclarator ')' |
65 |
|
; |
66 |
|
|
67 |
4030 |
PtrOperator |
68 |
R135 |
: [pct1, pct2, pnti, pndc] '*' [pus1-identifier, pus2-'(', pus3-'~', pus4-'*', pus5-'&', pus6-'::', pus7-OPERATOR] __id(rcpp_PtrOpStar) |
69 |
R136 |
: [pct1, pct2, pnti, pndc] '*' CvQualifier |
70 |
R137 |
: [rct1, rct2, rnti, rndc] '&' [rua1-identifier, rua2-'(', rua3-'~', rua4-'*', rua5-'&', rua6-'::', rua7-OPERATOR] |
71 |
R138 |
: SimpleOrQualifiedId [qmq1*] '::' '*' |
72 |
R139 |
: SimpleOrQualifiedId [qmq1*] '::' '*' CvQualifier |
73 |
R140 |
: ClassKey SimpleOrQualifiedId [qmq3*] '::' '*' |
74 |
R141 |
: ClassKey SimpleOrQualifiedId [qmq3*] '::' '*' CvQualifier |
75 |
|
; |
76 |
|
|
77 |
4031 |
CvQualifier |
78 |
R142 |
: CONST |
79 |
R143 |
: VOLATILE |
80 |
R144 |
: CONST VOLATILE |
81 |
R145 |
: VOLATILE CONST |
82 |
|
; |
83 |
|
|
84 |
4032 |
ParameterDeclarationClause |
85 |
R146 |
: ParameterDeclarationHeader ')' |
86 |
R147 |
: ParameterDeclarationHeader '...' ')' |
87 |
R148 |
: ParameterDeclarationHeader ParameterDeclarationsList ')' |
88 |
R149 |
: ParameterDeclarationHeader ParameterDeclarationsList '...' ')' |
89 |
R150 |
: ParameterDeclarationHeader ParameterDeclarationsList ',' '...' ')' |
90 |
|
; |
91 |
|
|
92 |
4033 |
ParameterDeclarationHeader |
93 |
R151 |
: [dpdc] '(' [phed1-identifier, phed2-'::', phed3-STRUCT, phed4-UNION, phed5-CLASS] |
94 |
|
; |
95 |
|
|
96 |
4034 |
ParameterDeclarationsList |
97 |
R152 |
: ParameterDeclaration |
98 |
R153 |
: ParameterDeclarationsList ',' ParameterDeclaration |
99 |
|
; |
100 |
|
|
101 |
4035 |
ParameterDeclaration |
102 |
R154 |
: UninitedParameter |
103 |
R155 |
: UninitedParameter '=' AssignmentExpression |
104 |
|
; |
105 |
|
|
106 |
4036 |
UninitedParameter |
107 |
R156 |
: TypeSpecifier |
108 |
R157 |
: TypeSpecifier Declarator |
109 |
R158 |
: TypeSpecifier AbstractDeclarator |
110 |
|
; |
111 |
|
|
112 |
4037 |
ExceptionsSpecification |
113 |
R159 |
: THROW '(' ')' |
114 |
R160 |
: THROW '(' ExceptionTypeIdsList ')' |
115 |
|
; |
116 |
|
|
117 |
4038 |
ExceptionTypeIdsList |
118 |
R161 |
: TypeId |
119 |
R162 |
: ExceptionTypeIdsList ',' TypeId |
120 |
|
; |
121 |
|
|
122 |
4039 |
TypeId |
123 |
R163 |
: TypeSpecifier |
124 |
R164 |
: TypeSpecifier AbstractDeclarator |
125 |
|
; |
126 |
|
|
127 |
4040 |
Initializer |
128 |
R165 |
: '=' InitializerClause |
129 |
R166 |
: '(' ExpressionsList ')' // Note that expression in this rule cannot be empty. |
130 |
|
; |
131 |
|
|
132 |
4041 |
InitializerClause |
133 |
R167 |
: AssignmentExpression |
134 |
|
/*+*/ |
135 |
R168 |
: '{' '}' |
136 |
R169 |
: '{' InitializersList '}' |
137 |
R170 |
: '{' InitializersList ',' '}' |
138 |
|
; |
139 |
|
|
140 |
4042 |
InitializersList |
141 |
R171 |
: InitializerClause |
142 |
R172 |
: InitializersList ',' InitializerClause |
143 |
|
; |
144 |
|
|
145 |
|
|
1 |
|
// |
2 |
|
// Cpp-05. Namespaces. |
3 |
|
// |
4 |
|
|
5 |
|
|
6 |
|
|
7 |
|
public NamespaceDefinition; |
8 |
|
public NamespaceAliasDefinition; |
9 |
|
|
10 |
4043 |
NamespaceDefinition |
11 |
R173 |
: NamespaceHeader '}' |
12 |
R174 |
: NamespaceHeader DeclarationsSeq '}' |
13 |
|
; |
14 |
|
|
15 |
4044 |
NamespaceHeader |
16 |
R175 |
: NAMESPACE '{' |
17 |
R176 |
: NAMESPACE identifier '{' |
18 |
|
; |
19 |
|
|
20 |
4045 |
NamespaceAliasDefinition |
21 |
R177 |
: NAMESPACE identifier '=' SimpleOrQualifiedId ';' |
22 |
|
; |
23 |
|
|
24 |
|
|
1 |
|
// |
2 |
|
// Cpp-06. Enums. |
3 |
|
// |
4 |
|
|
5 |
|
|
6 |
|
|
7 |
|
public EnumSpecifier; |
8 |
|
|
9 |
4046 |
EnumSpecifier |
10 |
R178 |
: EnumeratorHeader '}' |
11 |
R179 |
: EnumeratorHeader EnumeratorsList '}' |
12 |
R180 |
: EnumeratorHeader EnumeratorsList ',' '}' |
13 |
|
; |
14 |
|
|
15 |
4047 |
EnumeratorHeader |
16 |
R181 |
: ENUM '{' |
17 |
R182 |
: ENUM ':' SimpleTypeSpecifier '{' |
18 |
R183 |
: ENUM SimpleOrQualifiedId [ehfd] '{' |
19 |
R184 |
: ENUM SimpleOrQualifiedId [ehar] ':' SimpleTypeSpecifier '{' |
20 |
|
; |
21 |
|
|
22 |
4048 |
EnumeratorsList |
23 |
R185 |
: EnumeratorDefinition |
24 |
R186 |
: EnumeratorsList ',' EnumeratorDefinition |
25 |
|
; |
26 |
|
|
27 |
4049 |
EnumeratorDefinition |
28 |
R187 |
: identifier |
29 |
R188 |
: identifier '=' ConstantExpression |
30 |
|
; |
31 |
|
|
32 |
|
|
1 |
|
// |
2 |
|
// Cpp-07. Classes. |
3 |
|
// |
4 |
|
|
5 |
|
|
6 |
|
|
7 |
|
public ClassSpecifier, ClassKey, MemberDeclaration; |
8 |
|
|
9 |
4050 |
ClassSpecifier |
10 |
R189 |
: ClassHeader '}' |
11 |
R190 |
: ClassHeader MemberDeclarationsSeq '}' |
12 |
|
; |
13 |
|
|
14 |
4051 |
ClassHeader |
15 |
R191 |
: ClassKey '{' |
16 |
R192 |
: ClassKey ':' BaseClassSpecifiersList '{' |
17 |
R193 |
: ClassKey SimpleOrQualifiedId [chfd] '{' |
18 |
R194 |
: ClassKey SimpleOrQualifiedId [eich] ':' BaseClassSpecifiersList '{' |
19 |
|
; |
20 |
|
|
21 |
4052 |
ClassKey |
22 |
R195 |
: [phed3] STRUCT |
23 |
R196 |
: [phed4] UNION |
24 |
R197 |
: [phed5] CLASS [cktp-identifier] |
25 |
|
; |
26 |
|
|
27 |
4053 |
MemberDeclarationsSeq |
28 |
R198 |
: MemberDeclaration |
29 |
R199 |
: MemberDeclarationsSeq MemberDeclaration |
30 |
|
; |
31 |
|
|
32 |
4054 |
MemberDeclaration |
33 |
R200 |
: AccessSpecifier ':' |
34 |
R201 |
: SimpleMemberDeclaration |
35 |
R202 |
: FunctionDefinition |
36 |
R203 |
: MemberTemplateDeclaration |
37 |
R204 |
: MemberExplicitInstantiation |
38 |
R205 |
: UsingDeclaration |
39 |
|
; |
40 |
|
|
41 |
4055 |
AccessSpecifier |
42 |
R206 |
: PUBLIC |
43 |
R207 |
: PROTECTED |
44 |
R208 |
: PRIVATE |
45 |
|
; |
46 |
|
|
47 |
4056 |
SimpleMemberDeclaration |
48 |
R209 |
: ';' |
49 |
R210 |
: MemberDeclaratorsList ';' // All declarators in this rule should be: ctors, dectors, overloaded conversions. |
50 |
R211 |
: DeclTypeSpecifier ';' // DeclTypeSpecifier in this rule should be either enum or class. |
51 |
R212 |
: DeclTypeSpecifier MemberDeclaratorsList ';' |
52 |
|
; |
53 |
|
|
54 |
4057 |
MemberDeclaratorsList |
55 |
R213 |
: MemberDeclarator |
56 |
R214 |
: MemberDeclaratorsList ',' MemberDeclarator |
57 |
|
; |
58 |
|
|
59 |
4058 |
MemberDeclarator |
60 |
R215 |
: Declarator |
61 |
R216 |
: Declarator ConstantInitializer |
62 |
|
/*+*/ |
63 |
R217 |
: ':' ConstantExpression |
64 |
R218 |
: identifier [mdfd] ':' ConstantExpression |
65 |
|
; |
66 |
|
|
67 |
4059 |
ConstantInitializer |
68 |
R219 |
: '=' ConstantExpression // This initializer is also used for defining pure functions. |
69 |
|
; |
70 |
|
|
71 |
4060 |
BaseClassSpecifiersList |
72 |
R220 |
: BaseClassSpecifier |
73 |
R221 |
: BaseClassSpecifiersList ',' BaseClassSpecifier |
74 |
|
; |
75 |
|
|
76 |
4061 |
BaseClassSpecifier |
77 |
R222 |
: SimpleOrQualifiedId |
78 |
R223 |
: VIRTUAL SimpleOrQualifiedId |
79 |
R224 |
: AccessSpecifier SimpleOrQualifiedId |
80 |
R225 |
: VIRTUAL AccessSpecifier SimpleOrQualifiedId |
81 |
R226 |
: AccessSpecifier VIRTUAL SimpleOrQualifiedId |
82 |
|
; |
83 |
|
|
84 |
|
|
1 |
|
// |
2 |
|
// Cpp-08. Templates. |
3 |
|
// |
4 |
|
|
5 |
|
|
6 |
|
|
7 |
|
public TemplateDeclaration, MemberTemplateDeclaration; |
8 |
|
public TemplateParamsListHeader, TemplateId, TemplateArgumentsList; |
9 |
|
public ExplicitInstantiation, MemberExplicitInstantiation; |
10 |
|
|
11 |
4062 |
TemplateDeclaration |
12 |
R227 |
: TemplateDeclarationHeader Declaration |
13 |
|
; |
14 |
|
|
15 |
4063 |
MemberTemplateDeclaration |
16 |
R228 |
: TemplateDeclarationHeader MemberDeclaration |
17 |
|
; |
18 |
|
|
19 |
4064 |
TemplateDeclarationHeader |
20 |
R229 |
: TEMPLATE TemplateParamsListHeader '>' |
21 |
R230 |
: EXPORT TEMPLATE TemplateParamsListHeader '>' |
22 |
R231 |
: TEMPLATE TemplateParamsListHeader TemplateParametersList '>' |
23 |
R232 |
: EXPORT TEMPLATE TemplateParamsListHeader TemplateParametersList '>' |
24 |
|
; |
25 |
|
|
26 |
4065 |
TemplateParamsListHeader |
27 |
R233 |
: [eitp, oftp, cftp] '<' |
28 |
|
; |
29 |
|
|
30 |
4066 |
TemplateParametersList |
31 |
R234 |
: TemplateParameter |
32 |
R235 |
: TemplateParametersList ',' TemplateParameter |
33 |
|
; |
34 |
|
|
35 |
4067 |
TemplateParameter |
36 |
R236 |
: ParameterDeclaration |
37 |
R237 |
: TemplateTypeParameter |
38 |
R238 |
: TemplateTemplateParameter |
39 |
|
; |
40 |
|
|
41 |
4068 |
TemplateTypeParameter |
42 |
R239 |
: CLASS |
43 |
R240 |
: CLASS '=' TypeId |
44 |
R241 |
: CLASS [cktp] identifier |
45 |
R242 |
: CLASS [cktp] identifier '=' TypeId |
46 |
|
/*+*/ |
47 |
R243 |
: TYPENAME |
48 |
R244 |
: TYPENAME '=' TypeId |
49 |
R245 |
: TYPENAME identifier [tdp2-',', tdp3-'>'] |
50 |
R246 |
: TYPENAME identifier [tdp1] '=' TypeId |
51 |
|
; |
52 |
|
|
53 |
4069 |
TemplateTemplateParameter |
54 |
R247 |
: TEMPLATE TemplateParamsListHeader TemplateParametersList '>' ClassKey |
55 |
R248 |
: TEMPLATE TemplateParamsListHeader TemplateParametersList '>' ClassKey '=' SimpleOrQualifiedId |
56 |
R249 |
: TEMPLATE TemplateParamsListHeader TemplateParametersList '>' ClassKey identifier |
57 |
R250 |
: TEMPLATE TemplateParamsListHeader TemplateParametersList '>' ClassKey identifier '=' SimpleOrQualifiedId |
58 |
|
; |
59 |
|
|
60 |
4070 |
ExplicitInstantiation |
61 |
R251 |
: ExplicitInstantiationHeader Declaration |
62 |
|
; |
63 |
|
|
64 |
4071 |
MemberExplicitInstantiation |
65 |
R252 |
: ExplicitInstantiationHeader MemberDeclaration |
66 |
|
; |
67 |
|
|
68 |
4072 |
ExplicitInstantiationHeader |
69 |
R253 |
: TEMPLATE |
70 |
|
; |
71 |
|
|
72 |
4073 |
TemplateId |
73 |
R254 |
: [phed1] identifier TemplateParamsListHeader '>' |
74 |
R255 |
: [phed1] identifier TemplateParamsListHeader TemplateArgumentsList '>' |
75 |
|
; |
76 |
|
|
77 |
4074 |
TemplateArgumentsList |
78 |
R256 |
: TemplateArgument |
79 |
R257 |
: TemplateArgumentsList ',' TemplateArgument |
80 |
|
; |
81 |
|
|
82 |
4075 |
TemplateArgument |
83 |
R258 |
: AssignmentExpression // This is data field argument. |
84 |
R259 |
: TypeId // This is type argument. |
85 |
R260 |
: SimpleOrQualifiedId // This is class template argument. |
86 |
|
; |
87 |
|
|
88 |
|
|
1 |
|
// |
2 |
|
// Cpp-09. Functions. |
3 |
|
// |
4 |
|
|
5 |
|
|
6 |
|
|
7 |
|
public FunctionDefinition, OperatorFunctionId, ConversionFunctionId; |
8 |
|
|
9 |
4076 |
FunctionDefinition |
10 |
R261 |
: FunctionHeader CompoundStatement |
11 |
R262 |
: FunctionHeader ':' MemberInitsList CompoundStatement |
12 |
R263 |
: FunctionHeader TRY CompoundStatement ExceptionHandlersSeq |
13 |
R264 |
: FunctionHeader TRY ':' MemberInitsList CompoundStatement ExceptionHandlersSeq |
14 |
|
; |
15 |
|
|
16 |
4077 |
FunctionHeader |
17 |
R265 |
: Declarator // Declarator in this rule should be: ctor, dector or overloaded conversion. |
18 |
R266 |
: DeclTypeSpecifier Declarator // This should be either a regular function or an overlodaed operator. |
19 |
|
; |
20 |
|
|
21 |
4078 |
MemberInitsList |
22 |
R267 |
: MemberInitializer |
23 |
R268 |
: MemberInitsList ',' MemberInitializer |
24 |
|
; |
25 |
|
|
26 |
4079 |
MemberInitializer |
27 |
R269 |
: SimpleOrQualifiedId '(' ')' |
28 |
R270 |
: SimpleOrQualifiedId '(' ExpressionsList ')' |
29 |
|
; |
30 |
|
|
31 |
4080 |
OperatorFunctionId |
32 |
R271 |
: OPERATOR OverloadableOperator [oftp-'<'] |
33 |
|
/*+*/ |
34 |
R272 |
: OPERATOR OverloadableOperator TemplateParamsListHeader '>' |
35 |
R273 |
: OPERATOR OverloadableOperator TemplateParamsListHeader TemplateArgumentsList '>' |
36 |
|
; |
37 |
|
|
38 |
4081 |
OverloadableOperator |
39 |
R274 |
: NEW [nain-'['] | NEW [nain] '[' ']' |
40 |
R276 |
: DELETE [daid-'['] | DELETE [daid] '[' ']' |
41 |
|
/*+*/ |
42 |
R278 |
: '+' | '-' | '*' | '/' | '%' | '^' | '&' | '|' | '~' |
43 |
R287 |
: '!' | '=' | '<' | '>' | '+=' | '-=' | '*=' | '/=' | '%=' |
44 |
R296 |
: '^=' | '&=' | '|=' | '<<' | '>>' | '<<=' | '>>=' | '==' | '!=' |
45 |
R305 |
: '<=' | '>=' | '&&' | '||' | '++' | '--' | ',' | '->*' | '->' |
46 |
|
/*+*/ |
47 |
R314 |
: '(' ')' | '[' ']' |
48 |
|
; |
49 |
|
|
50 |
4082 |
ConversionFunctionId |
51 |
R316 |
: OPERATOR ConversionTypeId [cftp-'<'] |
52 |
|
/*+*/ |
53 |
R317 |
: OPERATOR ConversionTypeId TemplateParamsListHeader '>' |
54 |
R318 |
: OPERATOR ConversionTypeId TemplateParamsListHeader TemplateArgumentsList '>' |
55 |
|
; |
56 |
|
|
57 |
4083 |
ConversionTypeId |
58 |
R319 |
: TypeSpecifier [pct1-'*', rct1-'&'] |
59 |
R320 |
: TypeSpecifier ConversionDeclarator [pct2-'*', rct2-'&'] |
60 |
|
; |
61 |
|
|
62 |
4084 |
ConversionDeclarator |
63 |
R321 |
: PtrOperator |
64 |
R322 |
: ConversionDeclarator PtrOperator |
65 |
|
; |
66 |
|
|
67 |
|
|
1 |
|
// |
2 |
|
// Cpp-10. Statements. |
3 |
|
// |
4 |
|
|
5 |
|
|
6 |
|
|
7 |
|
public CompoundStatement; |
8 |
|
public ExceptionHandlersSeq; |
9 |
|
|
10 |
4085 |
Statement |
11 |
R323 |
: CompoundStatement |
12 |
R324 |
: LabeledStatement |
13 |
R325 |
: BlockDeclaration |
14 |
R326 |
: ExpressionStatement |
15 |
R327 |
: SelectionStatement |
16 |
R328 |
: IterationStatement |
17 |
R329 |
: JumpStatement |
18 |
R330 |
: TryBlock |
19 |
|
; |
20 |
|
|
21 |
4086 |
CompoundStatement |
22 |
R331 |
: CompoundStatementHeader '}' |
23 |
R332 |
: CompoundStatementHeader StatementsSeq '}' |
24 |
|
; |
25 |
|
|
26 |
4087 |
CompoundStatementHeader |
27 |
R333 |
: '{' |
28 |
|
; |
29 |
|
|
30 |
4088 |
StatementsSeq |
31 |
R334 |
: Statement |
32 |
R335 |
: StatementsSeq Statement |
33 |
|
; |
34 |
|
|
35 |
4089 |
LabeledStatement |
36 |
R336 |
: identifier ':' Statement |
37 |
R337 |
: CASE ConstantExpression ':' Statement |
38 |
R338 |
: DEFAULT ':' Statement |
39 |
|
; |
40 |
|
|
41 |
4090 |
ExpressionStatement |
42 |
R339 |
: ExpressionsList ';' |
43 |
|
; |
44 |
|
|
45 |
4091 |
SelectionStatement |
46 |
R340 |
: IF '(' Condition ')' Statement [sebe-ELSE] |
47 |
R341 |
: IF '(' Condition ')' Statement [sebe] ELSE Statement |
48 |
R342 |
: SWITCH '(' Condition ')' Statement |
49 |
|
; |
50 |
|
|
51 |
4092 |
IterationStatement |
52 |
R343 |
: FOR '(' ForInitStatement ';' ')' Statement |
53 |
R344 |
: FOR '(' ForInitStatement ';' Expression ')' Statement |
54 |
R345 |
: FOR '(' ForInitStatement Condition ';' ')' Statement |
55 |
R346 |
: FOR '(' ForInitStatement Condition ';' Expression ')' Statement |
56 |
|
/*+*/ |
57 |
R347 |
: WHILE '(' Condition ')' Statement |
58 |
R348 |
: DoStatementBody WHILE '(' Expression ')' ';' |
59 |
|
; |
60 |
|
|
61 |
4093 |
ForInitStatement |
62 |
R349 |
: SimpleDeclaration |
63 |
R350 |
: ExpressionStatement |
64 |
|
; |
65 |
|
|
66 |
4094 |
Condition |
67 |
R351 |
: Expression |
68 |
R352 |
: UninitedCondition '=' AssignmentExpression |
69 |
|
; |
70 |
|
|
71 |
4095 |
UninitedCondition |
72 |
R353 |
: TypeSpecifier Declarator |
73 |
|
; |
74 |
|
|
75 |
4096 |
DoStatementBody |
76 |
R354 |
: DO Statement |
77 |
|
; |
78 |
|
|
79 |
4097 |
JumpStatement |
80 |
R355 |
: GOTO identifier ';' |
81 |
R356 |
: BREAK ';' |
82 |
R357 |
: CONTINUE ';' |
83 |
R358 |
: RETURN ';' |
84 |
R359 |
: RETURN Expression ';' |
85 |
|
; |
86 |
|
|
87 |
4098 |
TryBlock |
88 |
R360 |
: TRY CompoundStatement ExceptionHandlersSeq |
89 |
|
; |
90 |
|
|
91 |
4099 |
ExceptionHandlersSeq |
92 |
R361 |
: ExceptionHandler |
93 |
R362 |
: ExceptionHandlersSeq ExceptionHandler |
94 |
|
; |
95 |
|
|
96 |
4100 |
ExceptionHandler |
97 |
R363 |
: ExceptionHandlerHeader CompoundStatement |
98 |
|
; |
99 |
|
|
100 |
4101 |
ExceptionHandlerHeader |
101 |
R364 |
: CATCH '(' TypeSpecifier ')' |
102 |
R365 |
: CATCH '(' TypeSpecifier Declarator ')' |
103 |
R366 |
: CATCH '(' TypeSpecifier AbstractDeclarator ')' |
104 |
R367 |
: CATCH '(' '...' ')' |
105 |
|
; |
106 |
|
|
107 |
|
|
1 |
|
// |
2 |
|
// Cpp-11. Expressions. |
3 |
|
// |
4 |
|
|
5 |
|
|
6 |
|
|
7 |
|
public ExpressionsList, Expression, AssignmentExpression; |
8 |
|
public ConstantExpressionsList, ConstantExpression; |
9 |
|
public StringsSeq; |
10 |
|
|
11 |
4102 |
ExpressionsList |
12 |
R368 |
: AssignmentExpression |
13 |
R369 |
: ExpressionsList ',' AssignmentExpression |
14 |
|
; |
15 |
|
|
16 |
4103 |
Expression |
17 |
R370 |
: AssignmentExpression |
18 |
R371 |
: Expression ',' AssignmentExpression |
19 |
|
; |
20 |
|
|
21 |
4104 |
AssignmentExpression |
22 |
R372 |
: ConditionalExpression |
23 |
R373 |
: LogicalOrExpression AssignmentOperator AssignmentExpression |
24 |
R374 |
: ThrowExpression |
25 |
|
; |
26 |
|
|
27 |
4105 |
AssignmentOperator |
28 |
R375 |
: '=' | '+=' | '-=' | '*=' | '/=' | '%=' | '<<=' | '>>=' |
29 |
R383 |
: '&=' | '|=' | '^=' |
30 |
|
; |
31 |
|
|
32 |
4106 |
ThrowExpression |
33 |
R386 |
: THROW |
34 |
R387 |
: THROW AssignmentExpression |
35 |
|
; |
36 |
|
|
37 |
4107 |
ConstantExpressionsList |
38 |
R388 |
: ConstantExpression |
39 |
R389 |
: ConstantExpressionsList ',' ConstantExpression |
40 |
|
; |
41 |
|
|
42 |
4108 |
ConstantExpression |
43 |
R390 |
: ConditionalExpression |
44 |
|
; |
45 |
|
|
46 |
4109 |
ConditionalExpression |
47 |
R391 |
: LogicalOrExpression |
48 |
R392 |
: LogicalOrExpression '?' Expression ':' AssignmentExpression |
49 |
|
; |
50 |
|
|
51 |
4110 |
LogicalOrExpression |
52 |
R393 |
: LogicalAndExpression |
53 |
R394 |
: LogicalOrExpression '||' LogicalAndExpression |
54 |
|
; |
55 |
|
|
56 |
4111 |
LogicalAndExpression |
57 |
R395 |
: BitOrExpression |
58 |
R396 |
: LogicalAndExpression '&&' BitOrExpression |
59 |
|
; |
60 |
|
|
61 |
4112 |
BitOrExpression |
62 |
R397 |
: BitXorExpression |
63 |
R398 |
: BitOrExpression '|' BitXorExpression |
64 |
|
; |
65 |
|
|
66 |
4113 |
BitXorExpression |
67 |
R399 |
: BitAndExpression |
68 |
R400 |
: BitXorExpression '^' BitAndExpression |
69 |
|
; |
70 |
|
|
71 |
4114 |
BitAndExpression |
72 |
R401 |
: EqualityExpression |
73 |
R402 |
: BitAndExpression '&' EqualityExpression |
74 |
|
; |
75 |
|
|
76 |
4115 |
EqualityExpression |
77 |
R403 |
: RelationalExpression [rta1-'>'] |
78 |
R404 |
: EqualityExpression '==' RelationalExpression [rta2-'>'] |
79 |
R405 |
: EqualityExpression '!=' RelationalExpression [rta3-'>'] |
80 |
|
; |
81 |
|
|
82 |
4116 |
RelationalExpression |
83 |
R406 |
: ShiftExpression |
84 |
R407 |
: RelationalExpression '<' ShiftExpression |
85 |
R408 |
: RelationalExpression [rta1, rta2, rta3] '>' ShiftExpression |
86 |
R409 |
: RelationalExpression '<=' ShiftExpression |
87 |
R410 |
: RelationalExpression '>=' ShiftExpression |
88 |
|
; |
89 |
|
|
90 |
4117 |
ShiftExpression |
91 |
R411 |
: AdditiveExpression |
92 |
R412 |
: ShiftExpression '<<' AdditiveExpression |
93 |
R413 |
: ShiftExpression '>>' AdditiveExpression |
94 |
|
; |
95 |
|
|
96 |
4118 |
AdditiveExpression |
97 |
R414 |
: MultiplicativeExpression |
98 |
R415 |
: AdditiveExpression '+' MultiplicativeExpression |
99 |
R416 |
: AdditiveExpression '-' MultiplicativeExpression |
100 |
|
; |
101 |
|
|
102 |
4119 |
MultiplicativeExpression |
103 |
R417 |
: PmExpression |
104 |
R418 |
: MultiplicativeExpression '*' PmExpression |
105 |
R419 |
: MultiplicativeExpression '/' PmExpression |
106 |
R420 |
: MultiplicativeExpression '%' PmExpression |
107 |
|
; |
108 |
|
|
109 |
4120 |
PmExpression |
110 |
R421 |
: CastExpression |
111 |
R422 |
: PmExpression '.*' CastExpression |
112 |
R423 |
: PmExpression '->*' CastExpression |
113 |
|
; |
114 |
|
|
115 |
4121 |
CastExpression |
116 |
R424 |
: UnaryExpression |
117 |
R425 |
: '(' TypeId ')' CastExpression |
118 |
|
; |
119 |
|
|
120 |
4122 |
UnaryExpression |
121 |
R426 |
: PostfixExpression |
122 |
R427 |
: '++' CastExpression |
123 |
R428 |
: '--' CastExpression |
124 |
R429 |
: UnaryOperator CastExpression |
125 |
R430 |
: SIZEOF UnaryExpression |
126 |
R431 |
: SIZEOF '(' TypeId ')' |
127 |
R432 |
: NewExpression |
128 |
R433 |
: DeleteExpression |
129 |
|
; |
130 |
|
|
131 |
4123 |
UnaryOperator |
132 |
R434 |
: '*' [pus1-identifier, pus2-'(', pus3-'~', pus4-'*', pus5-'&', pus6-'::', pus7-OPERATOR] __id(rcpp_UnOpStar) |
133 |
R435 |
: '&' [rua1-identifier, rua2-'(', rua3-'~', rua4-'*', rua5-'&', rua6-'::', rua7-OPERATOR] |
134 |
R436 |
: '+' | '-' | '!' |
135 |
R439 |
: '~' [dsut-identifier] |
136 |
|
; |
137 |
|
|
138 |
4124 |
NewExpression |
139 |
R440 |
: NEW NewTypeId |
140 |
R441 |
: NEW NewTypeId NewInitializer |
141 |
R442 |
: NEW NewPlacement NewTypeId |
142 |
R443 |
: NEW NewPlacement NewTypeId NewInitializer |
143 |
R444 |
: '::' NEW NewTypeId |
144 |
R445 |
: '::' NEW NewTypeId NewInitializer |
145 |
R446 |
: '::' NEW NewPlacement NewTypeId |
146 |
R447 |
: '::' NEW NewPlacement NewTypeId NewInitializer |
147 |
|
/*+*/ |
148 |
R448 |
: NEW '(' TypeId ')' |
149 |
R449 |
: NEW '(' TypeId ')' NewInitializer |
150 |
R450 |
: NEW NewPlacement '(' TypeId ')' |
151 |
R451 |
: NEW NewPlacement '(' TypeId ')' NewInitializer |
152 |
R452 |
: '::' NEW '(' TypeId ')' |
153 |
R453 |
: '::' NEW '(' TypeId ')' NewInitializer |
154 |
R454 |
: '::' NEW NewPlacement '(' TypeId ')' |
155 |
R455 |
: '::' NEW NewPlacement '(' TypeId ')' NewInitializer |
156 |
|
; |
157 |
|
|
158 |
4125 |
NewPlacement |
159 |
R456 |
: '(' ExpressionsList ')' |
160 |
|
; |
161 |
|
|
162 |
4126 |
NewTypeId |
163 |
R457 |
: TypeSpecifier [pnti-'*', rnti-'&'] |
164 |
R458 |
: TypeSpecifier NewDeclarator |
165 |
|
; |
166 |
|
|
167 |
4127 |
NewDeclarator |
168 |
R459 |
: PtrOperator [pndc-'*', rndc-'&'] |
169 |
R460 |
: PtrOperator NewDeclarator |
170 |
R461 |
: DirectNewDeclarator |
171 |
|
; |
172 |
|
|
173 |
4128 |
DirectNewDeclarator |
174 |
R462 |
: '[' ExpressionsList ']' |
175 |
R463 |
: DirectNewDeclarator '[' ExpressionsList ']' |
176 |
|
; |
177 |
|
|
178 |
4129 |
NewInitializer |
179 |
R464 |
: '(' ')' |
180 |
R465 |
: '(' ExpressionsList ')' |
181 |
|
; |
182 |
|
|
183 |
4130 |
DeleteExpression |
184 |
R466 |
: DELETE CastExpression |
185 |
R467 |
: DELETE '[' ']' CastExpression |
186 |
R468 |
: '::' DELETE CastExpression |
187 |
R469 |
: '::' DELETE '[' ']' CastExpression |
188 |
|
; |
189 |
|
|
190 |
4131 |
PostfixExpression |
191 |
R470 |
: PrimaryExpression |
192 |
|
/*+*/ |
193 |
R471 |
: PostfixExpression '++' __id(rcpp_pfix_plpl) |
194 |
R472 |
: PostfixExpression '--' __id(rcpp_pfix_mnmn) |
195 |
|
/*+*/ |
196 |
R473 |
: PostfixExpression '.' ExpressionId __id(rcpp_pfix_dot) |
197 |
R474 |
: PostfixExpression '.' TEMPLATE ExpressionId __id(rcpp_pfix_dot_tmpl) |
198 |
R475 |
: PostfixExpression '->' ExpressionId __id(rcpp_pfix_arrow) |
199 |
R476 |
: PostfixExpression '->' TEMPLATE ExpressionId __id(rcpp_pfix_arrow_tmpl) |
200 |
|
/*+*/ |
201 |
R477 |
: PostfixExpression '[' ExpressionsList ']' __id(rcpp_pfix_array) |
202 |
|
/*+*/ |
203 |
R478 |
: PostfixExpression '(' ')' __id(rcpp_pfix_fcall_simp) |
204 |
R479 |
: PostfixExpression '(' ExpressionsList ')' __id(rcpp_pfix_fcall_prms) |
205 |
|
/*+*/ |
206 |
R480 |
: SimpleTypeSpecifier '(' ')' __id(rcpp_pfix_ctor1) |
207 |
R481 |
: SimpleTypeSpecifier '(' ExpressionsList ')' __id(rcpp_pfix_ctor2) |
208 |
R482 |
: TYPENAME SimpleOrQualifiedId [etpe] '(' ')' __id(rcpp_pfix_ctor3) |
209 |
R483 |
: TYPENAME SimpleOrQualifiedId [etpe] '(' ExpressionsList ')' __id(rcpp_pfix_ctor4) |
210 |
|
/*+*/ |
211 |
R484 |
: CONST_CAST '<' TypeId '>' '(' Expression ')' __id(rcpp_pfix_cs_cast) |
212 |
R485 |
: STATIC_CAST '<' TypeId '>' '(' Expression ')' __id(rcpp_pfix_st_cast) |
213 |
R486 |
: DYNA_CAST '<' TypeId '>' '(' Expression ')' __id(rcpp_pfix_dy_cast) |
214 |
R487 |
: REIN_CAST '<' TypeId '>' '(' Expression ')' __id(rcpp_pfix_re_cast) |
215 |
|
/*+*/ |
216 |
R488 |
: TYPEID '(' Expression ')' __id(rcpp_pfix_tpid_expr) |
217 |
R489 |
: TYPEID '(' TypeId ')' __id(rcpp_pfix_tpid_type) |
218 |
|
; |
219 |
|
|
220 |
4132 |
PrimaryExpression |
221 |
R490 |
: Literal |
222 |
R491 |
: THIS |
223 |
R492 |
: ExpressionId [dpe1-';', dpe2-',', dpe3-'(', dpe4-')', dpe5-'[', dpe6-'='] |
224 |
R493 |
: '(' Expression ')' |
225 |
|
; |
226 |
|
|
227 |
4133 |
Literal |
228 |
R494 |
: FALSE | TRUE |
229 |
R496 |
: number | charconst | StringsSeq |
230 |
|
; |
231 |
|
|
232 |
4134 |
StringsSeq |
233 |
R499 |
: string |
234 |
R500 |
: StringsSeq string |
235 |
|
; |
236 |
|
|
237 |
|
|
1 |
|
// |
2 |
|
// Even C++ 2003 Grammar. Close to the Standard ISO/IEC 14882. |
3 |
|
// |
4 |
|
// Expected conflict definitions. |
5 |
|
// |
6 |
|
|
7 |
|
|
8 |
|
|
9 |
X0 |
ExpressionId_OR_NamedTypeSpecifier |
// Ambiguous SimpleOrQualifiedId. |
10 |
|
{ |
11 |
|
est1, est2, est3, est4, est5, est6, est7, est8, est9, est10, est11; |
12 |
|
} |
13 |
|
|
14 |
X1 |
SimpleTypeSpec_OR_TypeSpecifier |
// Ambiguous BuiltInTypeSpecifier or NamedTypeSpecifier |
15 |
|
{ |
16 |
|
dsb1, dsb2, dsb3, dsb4, dsb5, dsb6, dsb7, dsb8, dsb9, dsb10, dsb11, dsb12, dsb13, dsb14, dsb15; |
17 |
|
tsb1, tsb2, tsb3, tsb4, tsb5, tsb6, tsb7, tsb8, tsb9, tsb10, tsb11, tsb12, tsb13, tsb14, tsb15; |
18 |
|
dsn1, dsn2, dsn3, dsn4, dsn5, dsn6, dsn7, dsn8, dsn9, dsn10, dsn11, dsn12, dsn13, dsn14, dsn15; |
19 |
|
tsn1, tsn2, tsn3, tsn4, tsn5, tsn6, tsn7, tsn8, tsn9, tsn10, tsn11, tsn12, tsn13, tsn14, tsn15; |
20 |
|
} |
21 |
|
|
22 |
X2 |
DirectDeclarator_OR_PrimaryExpression |
// Ambiguous ExpressionId. |
23 |
|
{ |
24 |
|
dpe1, dpe2, dpe3, dpe4, dpe5, dpe6; |
25 |
|
} |
26 |
|
|
27 |
X3 |
PtrStar_OR_UnaryStar |
// Ambiguous '*'. |
28 |
|
{ |
29 |
|
pus1, pus2, pus3, pus4, pus5, pus6, pus7; |
30 |
|
|
31 |
|
// Resolution should be based on the current context. |
32 |
|
// If the current context is an expression context, then R403 should be taken. |
33 |
|
// Otherwise, the rule R124 should be used. |
34 |
|
} |
35 |
|
|
36 |
X4 |
RefAmpersand_OR_UnaryAmpersand |
// Ambiguous '&'. |
37 |
|
{ |
38 |
|
rua1, rua2, rua3, rua4, rua5, rua6, rua7; |
39 |
|
|
40 |
|
// Resolution should be based on the current context. |
41 |
|
// If the current context is an expression context, then R404 should be taken. |
42 |
|
// Otherwise, the rule R126 should be used. |
43 |
|
} |
44 |
|
|
45 |
X5 |
Qual_OR_MoreQual |
// Single inp sym '::'. |
46 |
|
{ |
47 |
|
qmq1, qmq2, qmq3, qmq4; |
48 |
|
} |
49 |
|
|
50 |
X6 |
Declarator_OR_ParameterDeclaration |
// Single inp sym '('. |
51 |
|
{ |
52 |
|
dpdc; |
53 |
|
} |
54 |
|
|
55 |
X7 |
ElabTypeSpec_OR_PostfixExpression |
// Single inp sym '('. |
56 |
|
{ |
57 |
|
etpe; |
58 |
|
} |
59 |
|
|
60 |
X8 |
MemberDecl_OR_FunctionDefn |
// Single inp sym ':'. |
61 |
|
{ |
62 |
|
mdfd; |
63 |
|
|
64 |
|
// This conflict has fixed resolution. |
65 |
|
} |
66 |
|
|
67 |
X9 |
EnumHeader_OR_AlignmentRecord |
// Single inp sym ':'. |
68 |
|
{ |
69 |
|
ehar; |
70 |
|
} |
71 |
|
|
72 |
X10 |
ExtendedId_OR_ClassHeader |
// Single inp sym ':'. |
73 |
|
{ |
74 |
|
eich; |
75 |
|
} |
76 |
|
|
77 |
X11 |
NewWithArrayIndex_OR_NewArray |
// Single inp sym '['. |
78 |
|
{ |
79 |
|
nain; |
80 |
|
} |
81 |
|
|
82 |
X12 |
DeleteWithArrayIndex_OR_DeleteArray |
// Single inp sym '['. |
83 |
|
{ |
84 |
|
daid; |
85 |
|
} |
86 |
|
|
87 |
X13 |
ExtendedId_OR_TemplateParams |
// Single inp sym '<'. |
88 |
|
{ |
89 |
|
eitp; |
90 |
|
} |
91 |
|
|
92 |
X14 |
OperatorFuncId_OR_TemplateParams |
// Single inp sym '<'. |
93 |
|
{ |
94 |
|
oftp; |
95 |
|
} |
96 |
|
|
97 |
X15 |
ConversionFuncId_OR_TemplateParams |
// Single inp sym '<'. |
98 |
|
{ |
99 |
|
cftp; |
100 |
|
} |
101 |
|
|
102 |
X16 |
Destructor_OR_UnaryTilda |
// Single inp sym identifier. |
103 |
|
{ |
104 |
|
dsut; |
105 |
|
} |
106 |
|
|
107 |
X17 |
ClassKey_OR_TypeParameter |
// Single inp sym identifier. |
108 |
|
{ |
109 |
|
cktp; |
110 |
|
} |
111 |
|
|
112 |
X18 |
RelationalExpr_OR_TemplateIdDataArg |
// Single inp sym '>'. |
113 |
|
{ |
114 |
|
rta1, rta2, rta3; |
115 |
|
} |
116 |
|
|
117 |
X19 |
EnumHeader_OR_FunctionDefn |
// Single inp sym '{'. |
118 |
|
{ |
119 |
|
ehfd; |
120 |
|
} |
121 |
|
|
122 |
X20 |
ClassHeader_OR_ConversionFuncHeader |
// Single inp sym '{'. |
123 |
|
{ |
124 |
|
chfd; |
125 |
|
} |
126 |
|
|
127 |
X21 |
PtrOperator_OR_ConversionTypeId |
// Single inp sym '*'. |
128 |
|
{ |
129 |
|
pct1, pct2; |
130 |
|
} |
131 |
|
|
132 |
X22 |
PtrOperator_OR_NewTypeId |
// Single inp sym '*'. |
133 |
|
{ |
134 |
|
pnti; |
135 |
|
|
136 |
|
// The parser is not sure if it should continue building the NewTypeId by |
137 |
|
// pushing in the '*' symbol, or stop building it, leaving '*' in the input |
138 |
|
// stream where it will get some other meaning, not the PtrOperator. |
139 |
|
} |
140 |
|
|
141 |
X23 |
PtrOperator_OR_NewDeclarator |
// Single inp sym '*'. |
142 |
|
{ |
143 |
|
pndc; |
144 |
|
|
145 |
|
// The parser is not sure if it should continue building the NewDeclarator by |
146 |
|
// pushing in the '*' symbol, or stop building it, leaving '*' in the input |
147 |
|
// stream where it will get some other meaning, not the PtrOperator. |
148 |
|
} |
149 |
|
|
150 |
X24 |
RefOperator_OR_ConversionTypeId |
// Single inp sym '&'. |
151 |
|
{ |
152 |
|
rct1, rct2; |
153 |
|
} |
154 |
|
|
155 |
X25 |
RefOperator_OR_NewTypeId |
// Single inp sym '&'. |
156 |
|
{ |
157 |
|
rnti; |
158 |
|
|
159 |
|
// The parser is not sure if it should continue building the NewTypeId by |
160 |
|
// pushing in the '&' symbol, or stop building it, leaving '&' in the input |
161 |
|
// stream where it will get some other meaning, not the RefOperator. |
162 |
|
} |
163 |
|
|
164 |
X26 |
RefOperator_OR_NewDeclarator |
// Single inp sym '&'. |
165 |
|
{ |
166 |
|
rndc; |
167 |
|
|
168 |
|
// The parser is not sure if it should continue building the NewDeclarator by |
169 |
|
// pushing in the '&' symbol, or stop building it, leaving '&' in the input |
170 |
|
// stream where it will get some other meaning, not the RefOperator. |
171 |
|
} |
172 |
|
|
173 |
X27 |
TypeParameter_OR_DataParameter |
// Single inp sym '&', misc signature. |
174 |
|
{ |
175 |
|
tdp1, tdp2, tdp3; |
176 |
|
} |
177 |
|
|
178 |
X28 |
ParamsHeader_OR_EnclosedDeclarator |
179 |
|
{ |
180 |
|
phed1, phed2, phed3, phed4, phed5; |
181 |
|
} |
182 |
|
|
183 |
X29 |
BigElse_OR_SmallElse |
// Single inp sym ELSE. |
184 |
|
{ |
185 |
|
sebe; |
186 |
|
|
187 |
|
// This conflict has fixed resolution according the the language standard. |
188 |
|
} |
189 |
|
|
190 |
|
|
|