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.