SOM IDL Language Grammar
specification
definition
module
: module identifier
[comment]
{ [comment] definition+
}
interface
interface_dcl
: interface identifier
[inheritance] [comment]
{ [comment] export*
} [comment]
inheritance
: scoped_name {,
scoped_name}*
export
| implementation_body ; [comment]
scoped_name
| scoped_name :: identifer
const_dcl
: const const_type
identifier =
const_type
const_expr
or_expr
xor_expr
: and_expr|xor_expr
^ and_expr
and_expr
shift_expr
| shift_expr:epv.:pk. >> add_expr
| shift_expr:epv. <<
add_expr
add_expr
mult_expr
unary_expr
: unary_operator primary_expr
unary_operator
primary_expr
literal
type_dcl
: typedef type_declarator
type_declarator
: type_spec declarator
{, declarator}*
type_spec
simple_type_spec
base_type_spec
template_type_spec
constr_type_spec
declarator
std_declarator
simple_declarator
complex_declarator
array_declarator
: simple_declarator
fixed_array_size+
fixed_array_size
floating_pt_type
integer_type
signed_int
unsigned_int
char_type
boolean_type
octet_type
any_type
voidptr_type
struct_type
: ( struct|exception)
identifier
| ( struct|exception) [comment]
member
: type_declarator ;
[comment]
union_type
| union identifier switch
switch_type_spec
case
: case_label+ element_spec
; [comment]
case_label
: case const_expr
: [comment]
element_spec
enum_type
: enum identifier
{ identifier
{, identifier}* [comment]
}
sequence_type
: sequence <
simple_type_spec , const_expr >
| sequence < simple_type_spec
>
string_type
attr_dcl
: [readonly] attribute
simple_type_spec
declarator {, declarator}*
op_dcl
: [oneway] op_type_spec
[stars] identifier
parameter_dcls [raises_expr]
[context_expr]
op_type_spec
parameter_dcls
: ( param_dcl {,
param_dcl}* [comme nt] )
param_dcl
: param_attribute simple_type_spec
declarator
param_attribute
raises_expr
context_expr
: context (
context_string{, context_string}* )
implementation_body
: implementation
[comment]
{ [comment] implementation+
}
implementation
pragma_stm
: #pragma modifier modifier_stm
| #pragma somtemittypes on
| #pragma somtemittypes off
modifier_stm
: smidentifier :
[modifier {, modifier}*] ;[comment]
modifier
| smidentifier = modifier_value
modifier_value
passthru
: passthru identifier
= string_literal+ ; [comment]
smidentifier
stars
[Back: Metaclass Framework Error Codes]
[Next: Implementing Sockets Subclasses]