1/*
2 * Copyright (c) 1999, 2009, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.  Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26/*
27 *    COMPONENT_NAME:  idl.parser
28 *
29 *    ORIGINS: 27
30 *
31 *    5639-D57, (C) COPYRIGHT International Business Machines Corp., 1997, 1998
32 *
33 */
34
35(1) <specification>	<imports> <definition> <specification'> // CORBA3
36
37(1) <imports>		e   // CORBA3
38			<import> <imports>  // CORBA3
39
40(1) <import>		"import" <imported_scope> ";"	// CORBA3
41
42(1) <imported_scope>	<scoped_name>	// CORBA3
43			<string_literal>    // CORBA3
44
45(1) <specification'>	e
46			<definition><specification'>
47
48(2) <definition>	<type_dcl> ";"
49			<const_dcl> ";"
50			<except_dcl> ";"
51			<interface> ";"
52			<module> ";"
53			<value> ";"
54			<type_id_dcl> ";" // CORBA3
55			<type_prefix_dcl> ";"  // CORBA3
56			<component> ";"	// CORBA3
57			<home_dcl> ";"	    // CORBA3
58
59(2) <type_id_dcl>	"typeId" <scoped_name> <string_literal> // CORBA3
60
61(2) <type_prefix_dcl>	"typePrefix" <scoped_name> <string_literal> // CORBA3
62
63(3) <module>		"module" <id> "{" <module'> "}"
64
65(3) <module'>		<definition><module''>
66
67(3) <module''>		<definition><module''>
68                        e
69
70(4) <interface>		<interface_dcl>
71			<forward_dcl>
72
73(5) <interface_dcl>	<interface_header> "{" <interface_body> "}"
74
75(6) <forward_dcl>	"abstract" "interface" <id>
76			"local" "interface" <id>	// CORBA3
77			"interface" <id>
78
79(7) <interface_header>	"abstract" "interface" <id> <interface_header'>
80			"local" "interface" <id> <interface_header'> // CORBA3
81			"interface" <id> <interface_header'>
82
83(7) <interface_header'>	e
84			<interface_inheritance_spec>
85
86(8) <interface_body>	<export><interface_body'>
87
88(8) <interface_body'>	e
89			<export><interface_body'>
90
91(9) <export>		<type_dcl> ";"
92			<const_dcl> ";"
93			<except_dcl> ";"
94			<attr_dcl> ";"
95			<op_dcl> ";"
96			<type_id_dcl> ";" // CORBA3
97			<type_prefix_dcl> ";"  // CORBA3
98
99(10) <interface_inheritance_spec>	":" <scoped_name> <inheritance_spec'>
100
101(10) <interface_inheritance_spec'>	e
102			"," <scoped_name> <inheritance_spec'>
103
104(12) <scoped_name>	<id> <scoped_name'>
105			"::" <id> <scoped_name'>
106
107(12) <scoped_name'>	e
108			"::" <id> <scoped_name'>
109
110(13) <value>		<value_dcl>
111			<value_abs_dcl>
112			<value_box_dcl>
113			<value_forward_dcl>
114
115(14) <value_forward_dcl>    "abstract" "valuetype" <id>
116			"valuetype" <id>
117
118(15) <value_box_dcl>	"valuetype" <id> <type_spec>
119
120(16) <value_abs_dcl>	"abstract" "valuetype" <id> <value_inheritance_spec> "{" <export> <vad> "}"
121			"abstract" "valuetype" <id> "{" <export> <vad> "}"
122
123(16) <vad>		e
124			<export> <vad>
125
126(17) <value_dcl>	<value_header> "{" <value_element> <ve> "}"
127
128(17) <ve>		e
129			<value_element> <ve>
130
131(18) <value_header>	"custom" "valuetype" <id> <value_inheritance_spec>
132			"valuetype" <id> <value_inheritance_spec>
133			"custom" "valuetype" <id>
134			"valuetype" <id>
135
136(19) <value_inheritance_spec>	<opt_inherits> <opt_supports>
137
138(19) <opt_inherits>	e
139			":" "truncatable" <value_name> <value_name_list>
140			":" <value_name> <value_name_list>
141
142(19) <value_name_list>	e
143			"," <value_name> <value_name_list>
144
145(19) <opt_supports>	e
146			"supports" <interface_name> <interface_name_list>
147
148(19) <interface_name_list>  e
149			"," <interface_name> <interface_name_list>
150
151(20) <value_name>	<scoped_name>
152
153(21) <value_element>	<export>
154			<state_member>
155			<init_dcl>
156
157(22) <state_member>	"public" <type_spec> <declarators> ";"
158			"private" <type_spec> <declarators> ";"
159
160(23) <init_dcl>		"factory" <id> "(" ")"
161			"factory" <id> "(" <init_param_dcls> ")"
162
163(24) <init_param_dcls>	<init_param_dcl>
164			<init_param_dcl> "," <init_param_dcls>
165
166(25) <init_param_dcl>	<init_param_attribute> <param_type_spec> <simple_declarator>
167
168(26) <init_param_attribute> "in"
169
170(27) <const_dcl>	"const" <const_type> <id> "=" <const_exp>
171
172(28) <const_type>	<integer_type>
173			<char_type>
174			<wide_char_type>
175			<boolean_type>
176			<floating_pt_type>
177			<string_type>
178			<wide_string_type>
179			<scoped_name>
180			<octet_type>
181
182(29) <const_exp>	<or_expr>
183
184(30) <or_expr>		<xor_expr> <or_expr'>
185
186(30) <or_expr'>		e
187			"|" <xor_expr> <or_expr'>
188
189(31) <xor_expr>		<and_expr> <xor_expr'>
190
191(31) <xor_expr'>	e
192			"^" <and_expr> <xor_expr'>
193
194(32) <and_expr>		<shift_expr><and_expr'>
195
196(32) <and_expr'>	e
197			"&" <shift_expr> <and_expr'>
198
199(33) <shift_expr>	<add_expr> <shift_expr'>
200
201(33) <shift_expr'>	e
202			">>" <add_expr> <shift_expr'>
203			"<<" <add_expr> <shift_expr'>
204
205(34) <add_expr>		<mult_expr> <add_expr'>
206
207(34) <add_expr'>	e
208			"+" <mult_expr> <add_expr'>
209			"-" <mult_expr> <add_expr'>
210
211(35) <mult_expr>	<unary_expr> <mult_expr'>
212
213(35) <mult_expr'>	e
214			"*" <unary_expr> <mult_expr'>
215			"/" <unary_expr> <mult_expr'>
216			"%" <unary_expr> <mult_expr'>
217
218(36) <unary_expr>	<unary_operator> <primary_expr>
219			<primary_expr>
220
221(37) <unary_operator>	"-"
222			"+"
223			"~"
224
225(38) <primary_expr>	<scoped_name>
226			<literal>
227			"(" <const_exp> ")"
228
229(39) <literal>		<<integer_literal>>
230			<<string_literal>>>
231			<<wide_string_literal>>>
232			<<character_literal>>
233			<<wide_character_literal>>
234			<<fixed_pt_literal>>
235			<<floating_pt_literal>>
236			<<boolean_literal>>
237
238(40) <boolean_literal>	"TRUE"
239			"FALSE"
240
241(41) <positive_int_const>   <const_exp>
242
243(42) <type_dcl>		"typedef" <type_declarator>
244			<struct_type>
245			<union_type>
246			<enum_type>
247			"native" <simple_declarator>
248
249(43) <type_declarator>	<type_spec> <declarators>
250
251(44) <type_spec>	<simple_type_spec>
252			<constr_type_spec>
253
254(45) <simple_type_spec>	<base_type_spec>
255			<template_type_spec>
256			<scoped_name>
257
258(46) <base_type_spec>	<floating_pt_type>
259			<integer_type>
260			<char_type>
261			<wide_char_type>
262			<boolean_type>
263			<octet_type>
264			<any_type>
265			<object_type>
266			<value_base_type>
267
268(47) <template_type_spec> <sequence_type>
269			<string_type>
270			<wide_string_type>
271			<fixed_pt_type>
272
273(48) <constr_type_spec>	<struct_type>
274			<union_type>
275			<enum_type>
276
277(49) <declarators>	<declarator> <declarators'>
278
279(49) <declarators'>	e
280			"," <declarator> <declarators'>
281
282(50) <declarator>	<simple_declarator>
283			<complex_declarator>
284
285(51) <simple_declarator> <id>
286
287(52) <complex_declarator>   <array_declarator>
288
289(53) <floating_pt_type>	"float"
290			"double"
291			"long" "double"
292
293(54) <integer_type>	<signed_int>
294			<unsigned_int>
295
296(55) <signed_int>	"long"
297			"short"
298			"long" "long"
299
300// 56-58 omitted
301
302(59) <unsigned_int>	"unsigned" <signed_int>
303
304// 60-62 omitted
305
306(63) <char_type>	"char"
307
308(64) <wide_char_type>	"wchar"
309
310(65) <boolean_type>	"boolean"
311
312(66) <octet_type>	"octet"
313
314(67) <any_type>		"any"
315
316(68) <object_type>	"Object"
317
318(69) <struct_type>	"struct" <id> "{" <member_list> "}"
319
320(70) <member_list>	<member> <member_list'>
321
322(70) <member_list'>	e
323			<member> <member_list'>
324
325(71) <member>		<type_spec> <declarators> ";"
326
327(72) <union_type>	"union" <id> "switch" "(" <switch_type_spec> ")" "{" <switch_body> "}"
328
329(73) <switch_type_spec>	<integer_type>
330			<char_type>
331			<boolean_type>
332			<enum_type>
333			<scoped_name>
334
335(74) <switch_body>	<case> <switch_body'>
336
337(74) <switch_body'>	e
338			<case> <switch_body'>
339
340(75) <case>		<case_label> <case'> <element_spec> ";"
341
342(75) <case'>		e
343			<case_label> <case'>
344
345(76) <case_label>	"case" <const_exp> ":"
346			"default" ":"
347
348(77) <element_spec>	<type_spec> <declarator>
349
350(78) <enum_type>	"enum" <id> "{" <id> <enum_type'> "}"
351
352(78) <enum_type'>	e
353			"," <id> <enum_type'>
354
355// 79 omitted
356
357(80) <sequence_type>	"sequence" "<" <simple_type_spec> <sequence_type'>
358
359(80) <sequence_type'>	"," <positive_int_const> ">"
360			">"
361
362(81) <string_type>	"string"
363			"string" "<" <positive_int_const> ">"
364
365(82) <wide_string_type>	"wstring"
366			"wstring" "<" <positive_int_const> ">"
367
368(83) <array_declarator>	<id> <fixed_array_size>
369
370(84) <fixed_array_size>	"[" <positive_int_const> "]"
371
372(85) <attr_dcl>		<readonly_attr_spec>	// CORBA3
373			<attr_spec> // CORBA3
374
375(85) <readonly_attr_spec>   <readonly_attr_header> <readonly_attr_declarator>	// CORBA3
376
377(85) <readonly_attr_header> "readonly" "attribute" <param_type_spec>	// CORBA3
378
379(85) <readonly_attr_declarator> <simple_declarator> <get_excep_expr>	// CORBA3
380			<simple_declarator> <sds>   // CORBA3
381
382(85) <sds>		e   // CORBA3
383			<simple_declarator> <sds>   // CORBA3
384
385(85) <attr_spec>	"attribute" <param_type_spec> <attr_declarator>	// CORBA3
386
387(85) <attr_declarator>	<simple_declarator> <attr_raises_expr>	// CORBA3
388			<simple_declarator> <sds>   // CORBA3
389
390(85) <attr_raises_expr>	<get_excep_expr>    // CORBA3
391			<get_excep_expr> <set_excep_expr>   // CORBA3
392			<set_excep_expr>    // CORBA3
393
394(85) <get_excep_expr>	"getRaises" <exception_list>	// CORBA3
395
396(85) <set_excep_expr>	"setRaises" <exception_list>	// CORBA3
397
398(85) <exception_list>	"(" <scoped_name> <els> ")" // CORBA3
399
400(85) <els>		e   // CORBA3
401			"," <scoped_name> <els>	    // CORBA3
402
403(86) <except_dcl>	"exception" <id> "{" <except_dcl'> "}"
404
405(86) <except_dcl'>	e
406			<member> <except_dcl'>
407
408(87) <op_dcl>		<op_attribute> <op_type_spec> <op_dcl'>
409			<op_type_spec> <op_dcl'>
410
411(87) <op_dcl'>		<id> <parameter_dcls> <op_dcl''>
412			<macroID> <parameter_dcls'> <op_dcl''>
413
414(87) <op_dcl''>		e
415			<context_expr>
416			<raises_expr>
417			<raises_expr> <context_expr>
418
419(88) <op_attribute>	"oneway"
420
421(89) <op_type_spec>	<param_type_spec>
422			"void"
423
424(90) <parameter_dcls>	"(" <parameter_dcls'>
425
426(90) <parameter_dcls'>	<param_dcl> <parameter_dcls''> ")"
427			")"
428
429(90) <parameter_dcls''>	e
430			"," <param_dcl> <parameter_dcls''>
431
432(91) <param_dcl>	<param_attribute> <param_type_spec> <id>
433
434(92) <param_attribute>	"in"
435			"out"
436			"inout"
437
438(93) <raises_expr>	"raises" "(" <scoped_name> <raises_expr'> ")"
439
440(93) <raises_expr'>	e
441			"," <scoped_name> <raises_expr'>
442
443(94) <context_expr>	"context" "(" <string_literal> <context_expr'> ")"
444
445(94) <context_expr'>        e
446			"," <string_literal> <context_expr'>
447
448(95) <param_type_spec>	<base_type_spec>
449			<string_type>
450			<wide_string_type>
451			<scoped_name>
452
453(96) <fixed_pt_type>	"fixed" "<" <positive_int_const> "," <positive_int_const> ">"
454
455(97) <fixed_pt_const_type> "fixed"
456
457(98) <value_base_type>	"ValueBase"
458
459// CORBA3 Component and Home IDL
460
461(200) <component>	<component_dcl>
462			<component_forward_dcl>
463
464(201) <component_forward_dcl>	"component" <id>
465
466(202) <component_dcl>	<component_header> "{" <component_body> "}"
467
468(203) <component_header> "component" <id>
469			"component" <id> <component_inheritance_spec>
470			"component" <id> <supported_interface_spec>
471			"component" <id> <component_inheritance_spec> <supported_interface_spec>
472
473(204) <supported_interface_spec> "supports" <scoped_name> <snames>
474
475(204) <snames>		e
476			"," <scoped_name> <snames>
477
478(205) <component_inheritance_spec> ":" <scoped_name>
479
480(206) <component_body>	<component_export> <ces>
481
482(206) <ces>		e
483			<component_export> <ces>
484
485(207) <component_export>    <provides_dcl> ";"
486			<uses_dcl> ";"
487			<emits_dcl> ";"
488			<publishes_dcl> ";"
489			<consumes_dcl> ";"
490			<attr_dcl> ";"
491
492(208) <provides_dcl>	"provides" <interface_type> <id>
493
494(209) <interface_type>	<scoped_name>
495			"Object"
496
497(210) <uses_dcl>	"uses" <interface_type> <id>
498			"uses" "multiple" <interface_type> <id>
499
500(211) <emits_dcl>	"emits" <scoped_name> <id>
501
502(212) <publishes_dcl>	"publishes" <scoped_name> <id>
503
504(213) <consumes_dcl>	"consumes" <scoped_name> <id>
505
506(214) <home_dcl>	<home_header> <home_body>
507
508(215) <home_header>	"home" <id> <home_inheritance_spec> "manages" <scoped_name>
509			"home" <id> "manages" <scoped_name>
510			"home" <id> <home_inheritance_spec> "manages" <scoped_name> <primary_key_spec>
511			"home" <id> "manages" <scoped_name> <primary_key_spec>
512
513(216) <home_inheritance_spec> ":" <scoped_name>
514
515(217) <primary_key_spec>    "primaryKey" <scoped_name>
516
517(218) <home_body>	"{" <home_export> <hes> "}"
518
519(218) <hes>		e
520			<home_export> <hes>
521
522(219) <home_export>	<export>
523			<factory_dcl> ";"
524			<finder_dcl> ";"
525
526(220) <factory_dcl>	"factory" <id> "(" <init_param_dcls> ")" <raises_expr>
527			"factory" <id> "("  ")" <raises_expr>
528			"factory" <id> "(" <init_param_dcls> ")"
529			"factory" <id> "("  ")"
530
531(221) <finder_dcl>	"finder" <id> "(" <init_param_dcls> ")" <raises_expr>
532			"finder" <id> "("  ")" <raises_expr>
533			"finder" <id> "(" <init_param_dcls> ")"
534			"finder" <id> "("  ")"
535
536NOTES:
537
538- #define id(id, id, ...) token-string is a macro definition.  There can be no space between the first id and the left paren.  Since id( must be treated as a token and id( can also appear in op_dcl, see that production for the effect of this token.
539
540