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. |