6. IDL Pre-processor GrammarΒΆ

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.

Previous topic

5. OpenSplice Modes and Languages

Next topic

7. Keys

This Page