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 536 NOTES: 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