blob: 3848083833b336e9feb933c4713c16e6c2887573 [file] [log] [blame]
/*
* Copyright (c) 1999, 2009, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* COMPONENT_NAME: idl.parser
*
* ORIGINS: 27
*
* 5639-D57, (C) COPYRIGHT International Business Machines Corp., 1997, 1998
*
*/
CORBA 2.3 IDL
---------------
(1) <specification> <definition><specification'>
(1) <specification'> e
<definition><specification'>
(2) <definition> <type_dcl> ";"
<const_dcl> ";"
<except_dcl> ";"
<interface> ";"
<module> ";"
<value> ";"
(3) <module> "module" <id> "{" <module'> "}"
(3) <module'> <definition><module''>
(3) <module''> <definition><module''>
e
(4) <interface> <interface_dcl>
<forward_dcl>
(5) <interface_dcl> <interface_header> "{" <interface_body> "}"
(6) <forward_dcl> "abstract" "interface" <id>
"interface" <id>
(7) <interface_header> "abstract" "interface" <id> <interface_header'>
"interface" <id> <interface_header'>
(7) <interface_header'> e
<interface_inheritance_spec>
(8) <interface_body> <export><interface_body'>
(8) <interface_body'> e
<export><interface_body'>
(9) <export> <type_dcl> ";"
<const_dcl> ";"
<except_dcl> ";"
<attr_dcl> ";"
<op_dcl> ";"
(10) <interface_inheritance_spec> ":" <scoped_name> <inheritance_spec'>
(10) <interface_inheritance_spec'> e
"," <scoped_name> <inheritance_spec'>
(12) <scoped_name> <id> <scoped_name'>
"::" <id> <scoped_name'>
(12) <scoped_name'> e
"::" <id> <scoped_name'>
(13) <value> <value_dcl>
<value_abs_dcl>
<value_box_dcl>
<value_forward_dcl>
(14) <value_forward_dcl> "abstract" "valuetype" <id>
"valuetype" <id>
(15) <value_box_dcl> "valuetype" <id> <type_spec>
(16) <value_abs_dcl> "abstract" "valuetype" <id> <value_inheritance_spec> "{" <export> <vad> "}"
"abstract" "valuetype" <id> "{" <export> <vad> "}"
(16) <vad> e
<export> <vad>
(17) <value_dcl> <value_header> "{" <value_element> <ve> "}"
(17) <ve> e
<value_element> <ve>
(18) <value_header> "custom" "valuetype" <id> <value_inheritance_spec>
"valuetype" <id> <value_inheritance_spec>
"custom" "valuetype" <id>
"valuetype" <id>
(19) <value_inheritance_spec> <opt_inherits> <opt_supports>
(19) <opt_inherits> e
":" "truncatable" <value_name> <value_name_list>
":" <value_name> <value_name_list>
(19) <value_name_list> e
"," <value_name> <value_name_list>
(19) <opt_supports> e
"supports" <interface_name> <interface_name_list>
(19) <interface_name_list> e
"," <interface_name> <interface_name_list>
(20) <value_name> <scoped_name>
(21) <value_element> <export>
<state_member>
<init_dcl>
(22) <state_member> "public" <type_spec> <declarators> ";"
"private" <type_spec> <declarators> ";"
(23) <init_dcl> "factory" <id> "(" ")"
"factory" <id> "(" <init_param_dcls> ")"
(24) <init_param_dcls> <init_param_decl>
<init_param_decl> "," <init_param_dcls>
(25) <init_param_dcl> <init_param_attribute> <param_type_spec> <simple_declarator>
(26) <init_param_attribute> "in"
(27) <const_dcl> "const" <const_type> <id> "=" <const_exp>
(28) <const_type> <integer_type>
<char_type>
<wide_char_type>
<boolean_type>
<floating_pt_type>
<string_type>
<wide_string_type>
<scoped_name>
<octet_type>
(29) <const_exp> <or_expr>
(30) <or_expr> <xor_expr> <or_expr'>
(30) <or_expr'> e
"|" <xor_expr> <or_expr'>
(31) <xor_expr> <and_expr> <xor_expr'>
(31) <xor_expr'> e
"^" <and_expr> <xor_expr'>
(32) <and_expr> <shift_expr><and_expr'>
(32) <and_expr'> e
"&" <shift_expr> <and_expr'>
(33) <shift_expr> <add_expr> <shift_expr'>
(33) <shift_expr'> e
">>" <add_expr> <shift_expr'>
"<<" <add_expr> <shift_expr'>
(34) <add_expr> <mult_expr> <add_expr'>
(34) <add_expr'> e
"+" <mult_expr> <add_expr'>
"-" <mult_expr> <add_expr'>
(35) <mult_expr> <unary_expr> <mult_expr'>
(35) <mult_expr'> e
"*" <unary_expr> <mult_expr'>
"/" <unary_expr> <mult_expr'>
"%" <unary_expr> <mult_expr'>
(36) <unary_expr> <unary_operator> <primary_expr>
<primary_expr>
(37) <unary_operator> "-"
"+"
"~"
(38) <primary_expr> <scoped_name>
<literal>
"(" <const_exp> ")"
(39) <literal> <<integer_literal>>
<<string_literal>>>
<<wide_string_literal>>>
<<character_literal>>
<<wide_character_literal>>
<<fixed_pt_literal>>
<<floating_pt_literal>>
<<boolean_literal>>
(40) <boolean_literal> "TRUE"
"FALSE"
(41) <positive_int_const> <const_exp>
(42) <type_dcl> "typedef" <type_declarator>
<struct_type>
<union_type>
<enum_type>
"native" <simple_declarator>
(43) <type_declarator> <type_spec> <declarators>
(44) <type_spec> <simple_type_spec>
<constr_type_spec>
(45) <simple_type_spec> <base_type_spec>
<template_type_spec>
<scoped_name>
(46) <base_type_spec> <floating_pt_type>
<integer_type>
<char_type>
<wide_char_type>
<boolean_type>
<octet_type>
<any_type>
<object_type>
<value_base_type>
(47) <template_type_spec> <sequence_type>
<string_type>
<wide_string_type>
<fixed_pt_type>
(48) <constr_type_spec> <struct_type>
<union_type>
<enum_type>
(49) <declarators> <declarator> <declarators'>
(49) <declarators'> e
"," <declarator> <declarators'>
(50) <declarator> <simple_declarator>
<complex_declarator>
(51) <simple_declarator> <id>
(52) <complex_declarator> <array_declarator>
(53) <floating_pt_type> "float"
"double"
"long" "double"
(54) <integer_type> <signed_int>
<unsigned_int>
(55) <signed_int> "long"
"short"
"long" "long"
// 56-58 omitted
(59) <unsigned_int> "unsigned" <signed_int>
// 60-62 omitted
(63) <char_type> "char"
(64) <wide_char_type> "wchar"
(65) <boolean_type> "boolean"
(66) <octet_type> "octet"
(67) <any_type> "any"
(68) <object_type> "Object"
(69) <struct_type> "struct" <id> "{" <member_list> "}"
(70) <member_list> <member> <member_list'>
(70) <member_list'> e
<member> <member_list'>
(71) <member> <type_spec> <declarators> ";"
(72) <union_type> "union" <id> "switch" "(" <switch_type_spec> ")" "{" <switch_body> "}"
(73) <switch_type_spec> <integer_type>
<char_type>
<boolean_type>
<enum_type>
<scoped_name>
(74) <switch_body> <case> <switch_body'>
(74) <switch_body'> e
<case> <switch_body'>
(75) <case> <case_label> <case'> <element_spec> ";"
(75) <case'> e
<case_label> <case'>
(76) <case_label> "case" <const_exp> ":"
"default" ":"
(77) <element_spec> <type_spec> <declarator>
(78) <enum_type> "enum" <id> "{" <id> <enum_type'> "}"
(78) <enum_type'> e
"," <id> <enum_type'>
// 79 omitted
(80) <sequence_type> "sequence" "<" <simple_type_spec> <sequence_type'>
(80) <sequence_type'> "," <positive_int_const> ">"
">"
(81) <string_type> "string"
"string" "<" <positive_int_const> ">"
(82) <wide_string_type> "wstring"
"wstring" "<" <positive_int_const> ">"
(83) <array_declarator> <id> <fixed_array_size>
(84) <fixed_array_size> "[" <positive_int_const> "]"
(85) <attr_dcl> "readonly" "attribute" <param_type_spec> <id> <attr_dcl'>
"attribute" <param_type_spec> <id> <attr_dcl'>
(85) <attr_dcl'> e
"," <id> <attr_dcl'>
(86) <except_dcl> "exception" <id> "{" <except_dcl'> "}"
(86) <except_dcl'> e
<member> <except_dcl'>
(87) <op_dcl> <op_attribute> <op_type_spec> <op_dcl'>
<op_type_spec> <op_dcl'>
(87) <op_dcl'> <id> <parameter_dcls> <op_dcl''>
<macroID> <parameter_dcls'> <op_dcl''>
(87) <op_dcl''> e
<context_expr>
<raises_expr>
<raises_expr> <context_expr>
(88) <op_attribute> "oneway"
(89) <op_type_spec> <param_type_spec>
"void"
(90) <parameter_dcls> "(" <parameter_dcls'>
(90) <parameter_dcls'> <param_dcl> <parameter_dcls''> ")"
")"
(90) <parameter_dcls''> e
"," <param_dcl> <parameter_dcls''>
(91) <param_dcl> <param_attribute> <param_type_spec> <id>
(92) <param_attribute> "in"
"out"
"inout"
(93) <raises_expr> "raises" "(" <scoped_name> <raises_expr'> ")"
(93) <raises_expr'> e
"," <scoped_name> <raises_expr'>
(94) <context_expr> "context" "(" <string_literal> <context_expr'> ")"
(94) <context_expr'> e
"," <string_literal> <context_expr'>
(95) <param_type_spec> <base_type_spec>
<string_type>
<wide_string_type>
<scoped_name>
(96) <fixed_pt_type> "fixed" "<" <positive_int_const> "," <positive_int_const> ">"
(97) <fixed_pt_const_type> "fixed"
(98) <value_base_type> "ValueBase"
NOTES:
- #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.