.. _`IDL Pre-processor Grammar`: ######################### 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.*. .. centered:: **The OMG's IDL Grammar** .. tabularcolumns:: | l | c | p{9.4cm} | +---------------------+------+--------------------------------------------+ | | ::= | * **+** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | ";" | | | | | **** ";" | **** | | | | ";" | ";" | | | | | ";" | **** ";" | ";" | | | | | ";" | | | | | ";" | ";" | ";" | | | | | ";" | | | | | ";" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | | | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "{" "}" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "@Annotation [ "(" ")" ] local | | | | interface" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "@Annotation [ "(" ")" ] local | | | | interface" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | * | +---------------------+------+--------------------------------------------+ | | | tance_spec> | | | +---------------------+------+--------------------------------------------+ | | ::= | | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "attribute" | | | | [ "default" | | | | ] ";" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | { "@" }* | | | | | +---------------------+------+--------------------------------------------+ | | ::= | { "//@" }* | | | | | +---------------------+------+--------------------------------------------+ | | ::= | [ "(" [ | | | | ] ")" ] | | | | | +---------------------+------+--------------------------------------------+ | | ::= | | { "," | | | | }* | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "=" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "struct" [ ":" | | | | ] | +---------------------+------+--------------------------------------------+ | | | | | | | | | | | | | | | | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "map" "<" "," | | | | "," | | | | | | | | ">" | "map" "<" "," | | | | | | | | ">" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | **"module" "{" | | | | + "}"** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | | | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "{" | | | | "}" | +---------------------+------+--------------------------------------------+ | | ::= | [ "abstract" | "local" | | | | ] "interface" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | [ "abstract" | "local" ] "interface" | | | | | | | | [ ] | | | | | +---------------------+------+--------------------------------------------+ | | ::= | * | | | | | +---------------------+------+--------------------------------------------+ | | ::= | ";" | ";" | | | | | ";" | ";" | | | | | ";" | ";" | | | | | ";" | | | | | +---------------------+------+--------------------------------------------+ | { | | itance_spec> | | "," | | | | }* | | | | | +---------------------+------+--------------------------------------------+ | | ::= | | +---------------------+------+--------------------------------------------+ | | ::= | **** | **"::" | | | | ** | ** "::" | | | | ** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | ( | | | | | | | ) | | | | | +---------------------+------+--------------------------------------------+ | | | | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "valuetype" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "abstract" "valuetype" [ | | | | ] | | | | "{" * "}" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "{" < | | | | value_element>* "}" | +---------------------+------+--------------------------------------------+ | | ::= | ["custom" ] "valuetype" [ | | | | ] | | | | | +---------------------+------+--------------------------------------------+ | { | | itance_spec> | | "," }* ] [ "supports" | | | | { "," | | | | }* ] | | | | | +---------------------+------+--------------------------------------------+ | | ::= | | +---------------------+------+--------------------------------------------+ | | ::= | | < state_member> | | | | | | +---------------------+------+--------------------------------------------+ | | ::= | ("public" | "private") | | | | ";" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "factory" "(" [ | | | | ] ")" [ | | | | ] ";" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | { "," | | | | }* | | | | | +---------------------+------+--------------------------------------------+ | | ::= | | | | | | | | | | +---------------------+------+--------------------------------------------+ | | | | +---------------------+------+--------------------------------------------+ | | ::= | **"const" | | | | "=" ** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | **** | **** | | | | | | **** | | | | | **** | | | | | ** | | | | | | | | | | | **** | **** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | **** | +---------------------+------+--------------------------------------------+ | | ::= | **** | ** "|" | | | | ** | +---------------------+------+--------------------------------------------+ | | ::= | **** | ** "^" | | | | ** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | **** | ** "&" | | | | ** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | **** | ** ">>" | | | | ** | ** "<<" | | | | ** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | **** | ** "+" | | | | ** | ** "-" | | | | ** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | **** | ** "*" | | | | ** | ** "/" | | | | ** | ** "%" | | | | ** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | ** ** | | | | | **** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | **"-"** | **"+"** | **"~"** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | **** | **** | | | | | **"(" ")"** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | **** | | | | | **** | | | | | | | | | | **** | | | | | | | | | | | | | | | **** | | | | | | | | | | +---------------------+------+--------------------------------------------+ | | ::= | **"TRUE"** | **"FALSE"** | | | | | +---------------------+------+--------------------------------------------+ | ** | | _const> | | | +---------------------+------+--------------------------------------------+ | | ::= | **"typedef" ** | | | | | **** | **** | | | | | **** | "native" | | | | | | | | | | | | | | +---------------------+------+--------------------------------------------+ | | ::= | ** ** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | **** | | | | | **** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | **** | | | | | **** | | | | | **** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | **** | | | | | **** | **** | | | | | | **** | | | | | **** | | | | | | | | | | | | +---------------------+------+--------------------------------------------+ | ** | | | _spec> | | **** | | | | | | | | | | | | +---------------------+------+--------------------------------------------+ | | ::= | **** | **** | | | | | **** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | ** { "," }*** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | **** | | | | | **** | | | | | +---------------------+------+--------------------------------------------+ | ** | | larator> | | | | | | | +---------------------+------+--------------------------------------------+ | ** | | larator> | | | | | | | +---------------------+------+--------------------------------------------+ | | | "long" "double" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | **** | **** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | **** | | | | | **** | | | | | **** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | **"short"** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | **"long"** | | | | | +---------------------+------+--------------------------------------------+ | | | | | | | | +---------------------+------+--------------------------------------------+ | | ::= | **** | | | | | ** | | | | | **** | | | | | +---------------------+------+--------------------------------------------+ | | | | | | | | +---------------------+------+--------------------------------------------+ | | | | | | | | +---------------------+------+--------------------------------------------+ | | | | | | | | +---------------------+------+--------------------------------------------+ | | ::= | **"char"** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "wchar" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | **"boolean"** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | **"octet"** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "any" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "Object" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | ** "{" | | | | "}"** | +---------------------+------+--------------------------------------------+ | | ::= | **+** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | ** ";" | | | | | ";" | | | | ** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | ** "union" | | | | "switch" "(" ")" | | | | "{" "}"** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | ** | | | | ** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | **+** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | **+ ";" | | | | | ::= | **"case" ":" | | | | | "default" ":"** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | ** ** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | ** "enum" "{" | | | | { "," | | | | }* "}"** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | ** ** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | **"sequence" "<" | | | | "," | | | | ">" | "sequence" | | | | "<" | | | | ">"** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | **"string" "<" | | | | ">"** | **"string"** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "wstring" "<" | | | | ">" | "wstring" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | ** | | | | +** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | **"[" "]"** | | | | | +---------------------+------+--------------------------------------------+ | | ::= | | | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "exception" "{" | | | | * "}" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | [ ] | | | | | | | | [ ] [ ] | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "oneway" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | | "void" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "(" { "," }* | | | | ")" | "(" ")" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | | | | | | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "in" | "out" | "inout" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "raises" "(" { "," | | | | }* ")" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "context" "(" { "," | | | | }* ")" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | | | | | | | | | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "fixed" "<" "," | | | | ">" | | | | | +---------------------+------+--------------------------------------------+ | | | | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "ValueBase" | | | | | +---------------------+------+--------------------------------------------+ | | "union" | | _decl> | | | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "import" | | | | ";" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | | | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "typeid" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "typeprefix" | | | | | | | | | +---------------------+------+--------------------------------------------+ | | | _spec> | | | | | | | +---------------------+------+--------------------------------------------+ | | | | _declarator> | | { "," | | | | }* | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "attribute" | | | | | | | | | +---------------------+------+--------------------------------------------+ | | ::= | | | | | | | | | | { "," }* | | | | | +---------------------+------+--------------------------------------------+ | | ::= | [ ] | | | | | | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "getraises" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "setraises" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "(" { "," | | | | } * ")" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | | | | | | | | | | | +---------------------+------+--------------------------------------------+ | | | ward_dcl> | | | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "{" | | | | "}" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "component" | | | | [ ] | | | | [ ] | | | | | +---------------------+------+--------------------------------------------+ | { "," | | terface_spec> | | }* | | | | | +---------------------+------+--------------------------------------------+ | | | heritance_spec> | | | | | | | +---------------------+------+--------------------------------------------+ | | ::= | * | | | | | +---------------------+------+--------------------------------------------+ | | ::= | ";" | ";" | | | | | ";" | ";" | | | | | ";" | ";" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "provides" | | | | | | | | | +---------------------+------+--------------------------------------------+ | | ::= | | "Object" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "uses" [ "multiple" ] < interface_type> | | | | | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "emits" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "publishes" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "consumes" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "home" [ | | | | ] [ | | | | ] "manages" | | | | [ ] | | | | | +---------------------+------+--------------------------------------------+ | | | tance_spec> | | | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "primarykey" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "{" * "}" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | | ";" | | | | | ";" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "factory" "(" [ | | | | ] ")" [ | | | | ] | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "finder" "(" [ | | | | ] ")" [ | | | | ] | | | | | +---------------------+------+--------------------------------------------+ | | ::= | ( | | | | | | ) | | | | | +---------------------+------+--------------------------------------------+ | | | | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "abstract" "eventtype" [ | | | | ] "{" | | | | * "}" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | "{" * "}" | | | | | +---------------------+------+--------------------------------------------+ | | ::= | [ "custom" ] "eventtype" [ | | | | ] | | | | | +---------------------+------+--------------------------------------------+ | | ::= | 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. | | | | | +---------------------+------+--------------------------------------------+ .. EoF