The Vortex OpenSplice IDL Pre-processor accepts the grammar which complies with the CORBA Specification. The Vortex OpenSplice IDL Pre-processor accepts the complete grammar, but it will ignore elements not relevant to the definition of data types.
In the following specification of the grammar (similar to EBNF), elements that are processed by the Vortex OpenSplice IDL Pre-processor are highlighted in bold. Note that Vortex OpenSplice does not support all base types that are specified by the OMG.
The idlpp also takes into account all C pre-processor directives that are common to ANSI-C, like #include, #define, #ifdef, etc..
The OMG’s IDL Grammar
| <specification> | ::= | <import>* <definition>+ |
| <definition> | ::= | <type_dcl> ”;” <ann_appl_post> | <type_dcl> ”;” | <const_dcl> ”;” | <except_dcl> ”;” | <interface> ”;” | <module> ”;” | <value> ”;” | <type_id_dcl> ”;” | <type_prefix_dcl> ”;” | <event> ”;” | <component> ”;” | <home_dcl> ”;” | <annotation> ”;” <ann_appl_post> |
| <annotation> | ::= | <ann_dcl> | <ann_fwd_dcl> |
| <ann_dcl> | ::= | <ann_header> “{” <ann_body> “}” |
| <ann_fwd_dcl> | ::= | “@Annotation [ “(” ”)” ] local interface” <identifier> |
| <ann_header> | ::= | “@Annotation [ “(” ”)” ] local interface” <identifier> |
| <ann_body> | ::= | <ann_attr>* |
| <ann_inheritance_spec> | ::= | ”:” <annotation_name> |
| <annotation_name> | ::= | <scoped_name> |
| <ann_attr> | ::= | <ann_appl> “attribute” <param_type_spec> <simple_declarator> [ “default” <const_exp> ] ”;” <ann_appl_post> |
| <ann_appl> | ::= | { “@” <ann_appl_dcl> }* |
| <ann_appl_post> | ::= | { “//@” <ann_appl_dcl> }* |
| <ann_appl_dcl> | ::= | <annotation_name> [ “(” [ <ann_appl_params> ] ”)” ] |
| <ann_appl_params> | ::= | <const_exp> | <ann_appl_param> { ”,” <ann_appl_param> }* |
| <ann_appl_param> | ::= | <identifier> “=” <const_exp> |
| <struct_header> | ::= | <ann_appl> “struct” <identifier> [ ”:” <scoped_name> ] |
| <switch_type | ::= | <integer_type> | <char_type> | <wide_char_type> | <boolean_type> | <enum_type> | <octet_type> | <scoped_name> |
| <map_type> | ::= | “map” “<” <simple_type_spec> ”,” <ann_appl> <simple_type_spec> ”,” <ann_appl_post> <positive_int_const> “>” | “map” “<” <simple_type_spec> ”,” <ann_appl> <simple_type_spec> <ann_appl_post> “>” |
| <module> | ::= | “module” <identifier> “{” <definition>+ “}” |
| <interface> | ::= | <interface_dcl> | <forward_dcl> |
| <interface_dcl> | ::= | <interface_header> “{” <interface_body> “}” |
| <forward_dcl> | ::= | [ “abstract” | “local” ] “interface” <identifier> |
| <interface_header> | ::= | [ “abstract” | “local” ] “interface” <identifier> [ <interface_inheritance_spec> ] |
| <interface_body> | ::= | <export>* |
| <export> | ::= | <type_dcl> ”;” | <const_dcl> ”;” | <except_dcl> ”;” | <attr_dcl> ”;” | <op_dcl> ”;” | <type_id_dcl> ”;” | <type_prefix_dcl> ”;” |
| <interface_inheritance_spec> | ::= | ”:” <interface_name> { ”,” <interface_name> }* |
| <interface_name> | ::= | <scoped_name> |
| <scoped_name> | ::= | <identifier> | ”::” <identifier> | <scoped_name> ”::” <identifier> |
| <value> | ::= | (<value_dcl> | <value_abs_dcl> | <value_box_dcl> | <value_forward_dcl>) |
| <value_forward_dcl> | ::= | [ “abstract” ] “valuetype” <identifier> |
| <value_box_dcl> | ::= | “valuetype” <identifier> <type_spec> |
| <value_abs_dcl> | ::= | “abstract” “valuetype” <identifier> [ <value_inheritance_spec> ] “{” <export>* “}” |
| <value_dcl> | ::= | <value_header> “{” < value_element>* “}” |
| <value_header> | ::= | [“custom” ] “valuetype” <identifier> [ <value_inheritance_spec> ] |
| <value_inheritance_spec> | ::= | [ ”:” [ “truncatable” ] <value_name> { ”,” <value_name> }* ] [ “supports” <interface_name> { ”,” <interface_name> }* ] |
| <value_name> | ::= | <scoped_name> |
| <value_element> | ::= | <export> | < state_member> | <init_dcl> |
| <state_member> | ::= | (“public” | “private”)<type_spec> <declarators>”;” |
| <init_dcl> | ::= | “factory” <identifier> “(” [ <init_param_decls> ] ”)” [ <raises_expr> ] ”;” |
| <init_param_decls> | ::= | <init_param_decl> { ”,” <init_param_decl> }* |
| <init_param_decl> | ::= | <init_param_attribute> <param_type_spec> <simple_declarator> |
| <init_param_attribute> | ::= | “in” |
| <const_dcl> | ::= | “const” <const_type> <identifier> “=” <const_exp> |
| <const_type> | ::= | <integer_type> | <char_type> | <wide_char_type> | <boolean_type> | <floating_pt_type> | <string_type> | <wide_string_type> | <fixed_pt_const_type> | **<scoped_name> | <octet_type> |
| <const_exp> | ::= | <or_expr> |
| <or_expr> | ::= | <xor_expr> | <or_expr> “|” <xor_expr> |
| <xor_expr> | ::= | <and_expr> | <xor_expr> “^” <and_expr> |
| <and_expr> | ::= | <shift_expr> | <and_expr> “&” <shift_expr> |
| <shift_expr> | ::= | <add_expr> | <shift_expr> “>>” <add_expr> | <shift_expr> “<<” <add_expr> |
| <add_expr> | ::= | <mult_expr> | <add_expr> “+” <mult_expr> | <add_expr> “-” <mult_expr> |
| <mult_expr> | ::= | <unary_expr> | <mult_expr> “*” <unary_expr> | <mult_expr> “/” <unary_expr> | <mult_expr> “%” <unary_expr> |
| <unary_expr> | ::= | <unary_operator> <primary_expr> | <primary_expr> |
| <unary_operator> | ::= | “-“ | “+” | “~” |
| <primary_expr> | ::= | <scoped_name> | <literal> | “(” <const_exp> ”)” |
| <literal> | ::= | <integer_literal> | <string_literal> | <wide_string_literal> | <character_literal> | <wide_character_literal> | <fixed_pt_literal> | <floating_pt_literal> | <boolean_literal> |
| <boolean_literal> | ::= | “TRUE” | “FALSE” |
| <positive_int_const> | ::= | <const_exp> |
| <type_dcl> | ::= | “typedef” <type_declarator> | <struct_type> | <union_type> | <enum_type> | “native” <simple_declarator> | <constr_forward_decl> |
| <type_declarator> | ::= | <type_spec> <declarators> |
| <type_spec> | ::= | <simple_type_spec> | <constr_type_spec> |
| <simple_type_spec> | ::= | <base_type_spec> | <template_type_spec> | <scoped_name> |
| <base_type_spec> | ::= | <floating_pt_type> | <integer_type> | <char_type> | <wide_char_type> | <boolean_type> | <octet_type> | <any_type> | <object_type> | <value_base_type> |
| <template_type_spec> | ::= | <sequence_type> | <string_type> | <wide_string_type> | <fixed_pt_type> | <map_type> |
| <constr_type_spec> | ::= | <struct_type> | <union_type> | <enum_type> |
| <declarators> | ::= | <declarator> { ”,” <declarator> }* |
| <declarator> | ::= | <simple_declarator> | <complex_declarator> |
| <simple_declarator> | ::= | <identifier> |
| <complex_declarator> | ::= | <array_declarator> |
| <floating_pt_type> | ::= | “float” | “double” | “long” “double” |
| <integer_type> | ::= | <signed_int> | <unsigned_int> |
| <signed_int> | ::= | <signed_short_int> | <signed_long_int> | <signed_longlong_int> |
| <signed_short_int> | ::= | “short” |
| <signed_long_int> | ::= | “long” |
| <signed_longlong_int> | ::= | “long” “long” |
| <unsigned_int> | ::= | <unsigned_short_int> | <unsigned_long_int> | **<unsigned_longlong_int> |
| <unsigned_short_int> | ::= | “unsigned” “short” |
| <unsigned_long_int> | ::= | “unsigned” “long” |
| <unsigned_longlong_int> | ::= | “unsigned” “long” “long” |
| <char_type> | ::= | “char” |
| <wide_char_type> | ::= | “wchar” |
| <boolean_type> | ::= | “boolean” |
| <octet_type> | ::= | “octet” |
| <any_type> | ::= | “any” |
| <object_type> | ::= | “Object” |
| <struct_type> | ::= | <struct_header> “{” <member_list> “}” |
| <member_list> | ::= | <member>+ |
| <member> | ::= | <type_spec> <declarators> ”;” | <ann_appl> <type_spec> <declarator> ”;” <ann_appl_post> |
| <union_type> | ::= | <ann_appl> “union” <identifier> “switch” “(” <switch_type_spec> ”)” “{” <switch_body> “}” |
| <switch_type_spec> | ::= | <ann_appl> <switch_type_name> <ann_appl_post> |
| <switch_body> | ::= | <case>+ |
| <case> | ::= | <case_label>+ <element_spec> ”;” <ann_appl_post |
| <case_label> | ::= | “case” <const_exp> ”:” | “default” ”:” |
| <element_spec> | ::= | <ann_appl> <type_spec> <declarator> |
| <enum_type> | ::= | <ann_appl> “enum” <identifier> “{” <enumerator> { ”,” <ann_appl_post> <enumerator> }* <ann_appl_post> “}” |
| <enumerator> | ::= | <ann_appl> <identifier> |
| <sequence_type> | ::= | “sequence” “<” <ann_appl> <simple_type_spec> ”,” <ann_appl_post> <positive_int_const> “>” | “sequence” “<” <ann_appl> <simple_type_spec> <ann_appl_post> “>” |
| <string_type> | ::= | “string” “<” <positive_int_const> “>” | “string” |
| <wide_string_type> | ::= | “wstring” “<” <positive_int_const> “>” | “wstring” |
| <array_declarator> | ::= | <identifier> <ann_appl> <ann_appl_post> <fixed_array_size>+ |
| <fixed_array_size> | ::= | “[” <positive_int_const> “]” |
| <attr_dcl> | ::= | <readonly_attr_spec> | <attr_spec> |
| <except_dcl> | ::= | “exception” <identifier> “{” <member>* “}” |
| <op_dcl> | ::= | [ <op_attribute> ] <op_type_spec> <identifier> <parameter_dcls> [ <raises_expr> ] [ <context_expr> ] |
| <op_attribute> | ::= | “oneway” |
| <op_type_spec> | ::= | <param_type_spec> | “void” |
| <parameter_dcls> | ::= | “(” <param_dcl> { ”,” <param_dcl> }* ”)” | “(” ”)” |
| <param_dcl> | ::= | <param_attribute> <param_type_spec> <simple_declarator> |
| <param_attribute> | ::= | “in” | “out” | “inout” |
| <raises_expr> | ::= | “raises” “(” <scoped_name> { ”,” <scoped_name> }* ”)” |
| <context_expr> | ::= | “context” “(” <string_literal> { ”,” <string_literal> }* ”)” |
| <param_type_spec> | ::= | <base_type_spec> | <string_type> | <wide_string_type> | <scoped_name> |
| <fixed_pt_type> | ::= | “fixed” “<” <positive_int_const> ”,” <positive_int_const> “>” |
| <fixed_pt_const_type> | ::= | “fixed” |
| <value_base_type> | ::= | “ValueBase” |
| <constr_forward_decl> | ::= | “struct” <identifier> | “union” <identifier> |
| <import> | ::= | “import” <imported_scope> ”;” |
| <imported_scope> | ::= | <scoped_name> | <string_literal> |
| <type_id_dcl> | ::= | “typeid” <scoped_name> <string_literal> |
| <type_prefix_dcl> | ::= | “typeprefix” <scoped_name> <string_literal> |
| <readonly_attr_spec> | ::= | “readonly” “attribute” <param_type_spec> <readonly_attr_declarator> |
| <readonly_attr_declarator> | ::= | <simple_declarator> <raises_expr> | <simple_declarator> { ”,” <simple_declarator> }* |
| <attr_spec> | ::= | “attribute” <param_type_spec> <attr_declarator> |
| <attr_declarator> | ::= | <simple_declarator> <attr_raises_expr> | <simple_declarator> { ”,” <simple_declarator> }* |
| <attr_raises_expr> | ::= | <get_excep_expr> [ <set_excep_expr> ] | <set_excep_expr> |
| <get_excep_expr> | ::= | “getraises” <exception_list> |
| <set_excep_expr> | ::= | “setraises” <exception_list> |
| <exception_list> | ::= | “(” <scoped_name> { ”,” <scoped_name> } * ”)” |
| <component> | ::= | <component_dcl> | <component_forward_dcl> |
| <component_forward_dcl> | ::= | “component” <identifier> |
| <component_dcl> | ::= | <component_header> “{” <component_body> “}” |
| <component_header> | ::= | “component” <identifier> [ <component_inheritance_spec> ] [ <supported_interface_spec> ] |
| <supported_interface_spec> | ::= | “supports” <scoped_name> { ”,” <scoped_name> }* |
| <component_inheritance_spec> | ::= | ”:” <scoped_name> |
| <component_body> | ::= | <component_export>* |
| <component_export> | ::= | <provides_dcl> ”;” | <uses_dcl> ”;” | <emits_dcl> ”;” | <publishes_dcl> ”;” | <consumes_dcl> ”;” | <attr_dcl> ”;” |
| <provides_dcl> | ::= | “provides” <interface_type> <identifier> |
| <interface_type> | ::= | <scoped_name> | “Object” |
| <uses_dcl> | ::= | “uses” [ “multiple” ] < interface_type> <identifier> |
| <emits_dcl> | ::= | “emits” <scoped_name> <identifier> |
| <publishes_dcl> | ::= | “publishes” <scoped_name> <identifier> |
| <consumes_dcl> | ::= | “consumes” <scoped_name> <identifier> |
| <home_dcl> | ::= | <home_header> <home_body> |
| <home_header> | ::= | “home” <identifier> [ <home_inheritance_spec> ] [ <supported_interface_spec> ] “manages” <scoped_name> [ <primary_key_spec> ] |
| <home_inheritance_spec> | ::= | ”:” <scoped_name> |
| <primary_key_spec> | ::= | “primarykey” <scoped_name> |
| <home_body> | ::= | “{” <home_export>* “}” |
| <home_export> | ::= | <export> | <factory_dcl> ”;” | <finder_dcl> ”;” |
| <factory_dcl> | ::= | “factory” <identifier> “(” [ <init_param_decls> ] ”)” [ <raises_expr> ] |
| <finder_dcl> | ::= | “finder” <identifier> “(” [ <init_param_decls> ] ”)” [ <raises_expr> ] |
| <event> | ::= | (<event_dcl> | <event_abs_dcl> | <event_forward_dcl>) |
| <event_forward_dcl> | ::= | [ “abstract” ] “eventtype” <identifier> |
| <event_abs_dcl> | ::= | “abstract” “eventtype” <identifier> [ <value_inheritance_spec> ] “{” <export>* “}” |
| <event_dcl> | ::= | <event_header> “{” <value_element>* “}” |
| <event_header> | ::= | [ “custom” ] “eventtype” <identifier> [ <value_inheritance_spec> ] |
| <identifier> | ::= | Arbitrarily long sequence of ASCII alphabetic, numeric and underscore characters. The first character must be ASCII alphabetic. All characters are significant. An identifier may be escaped with a prepended underscore character to prevent collisions with new IDL keywords. The underscore does not appear in the generated output. |