(M)IDL compiler
Luke Kenneth Casson Leighton
lkcl at samba.org
Tue Feb 22 00:29:30 GMT 2000
http://www.transarc.com/Library/documentation/dce/1.1/app_gd_core_18.html
17.14.7.1 we're _not_ implementing ptr, only ref and unique.
17.14.9.1 what the _hell_ is this?? :)
17.14.9.2 context rundown
ah. oh dear. :)
17.16 IDL Grammar Synopsis
SANDER! this is what you want :) DCE/RPC IDL syntax, in Backus-Naur
Format!
copyright, 1990-1996, transarc corporation, oops that probably means we
should get their permission. what's the implications, anyone any ideas?
<interface> ::= <interface_header> "{" <interface_body> "}"
<interface_header> ::=
"[" <interface_attributes> "]" "interface" <identifier>
<interface_attributes> ::=
<interface_attribute> [ "," <interface_attribute> ]
<interface_attribute> ::= "uuid" "(" <uuid_rep> ")"
| "version" "(" <major> [ "." <minor> ] ")"
| "endpoint" "(" <endpoint_spec> [ "," <endpoint_spec> ] ... ")"
| "pointer_default" "(" <pointer_attribute> ")"
| "local"
| "exceptions" "(" <excep_name> ["," <excep_name>] ... ")"
<excep_name> ::= <Identifier>
<major> ::= <integer>
<minor> ::= <integer>
<endpoint_spec> ::=
""" <family_string> ":" "[" <endpoint_string> "]" """
<family_string> ::= <identifier>
<endpoint_string> ::= <identifier>
<interface_body> ::= [ <import> ] ... [ <export> ]
<export> ::= <const_declaration> ";"
| <type_declaration> ";"
| <op_declaration> ";"
<import> ::= import <import_files> ";"
<import_files> ::= <filename> [ "," <filename> ] ... ";"
<filename> ::= """ <character> ... """
<const_declaration> ::=
"const" <const_type_spec> <identifier> "=" <const_exp>
<const_type_spec> ::=
<integer_type> | "char" | "char" "*" | "boolean" | "void" "*"
<const_exp> ::=
<integer_const_exp> | <character_const> | <string_const>
| <identifier> | "TRUE" | "FALSE" | "NULL"
<integer_const_exp> ::= <conditional_exp>
<conditional_exp> ::= <logical_or_exp>
| <logical_or_exp> "?" <integer_const_exp> ":" <conditional_exp>
<logical_or_exp> ::= <logical_and_exp>
| <logical_or_exp> "||" <logical_and_exp>
<logical_and_exp> ::= <inclusive_or_exp>
| <logical_and_exp> "&&" <inclusive_or_exp>
<inclusive_or_exp> ::= <exclusive_or_exp>
| <inclusive_or_exp> "|" <exclusive_or_exp>
<exclusive_or_exp> ::= <and_exp>
| <and_exp> "^" <and_exp>
<and_exp> ::= <equality_exp>
| <and_exp> "&" <equality_exp>
<equality_exp> ::= <relational_exp>
| <equality_exp> "==" <relational_exp>
| <equality_exp> "!=" <relational_exp>
<relational_exp> ::= <shift_exp>
| <relational_exp> "<" <shift_exp>
| <relational_exp> ">" <shift_exp>
| <relational_exp> "<=" <shift_exp>
| <relational_exp> ">=" <shift_exp>
<shift_exp> ::= <additive_exp>
| <shift_exp> "<<" <additive_exp>
| <shift_exp> ">>" <additive_exp>
<additive_exp> ::= <multiplicative_exp>
| <additive_exp> "+" <multiplicative_exp>
| <additive_exp> "-" <multiplicative_exp>
<multiplicative_exp> ::= <unary_exp>
| <multiplicative_exp> "*" <unary_exp>
| <multiplicative_exp> "/" <unary_exp>
| <multiplicative_exp> "%" <unary_exp>
<unary_exp> ::= <primary_exp>
| "+" <primary_exp>
| "-" <primary_exp>
| "~" <primary_exp>
| "!" <primary_exp>
<primary_exp> ::= <integer_literal>
| <identifier>
<character_const> ::= "'" <character> "'"
<string_const> ::= """ [ <character> ] ... """
<type_declaration> ::=
"typedef" [ <type_attributes> ] <type_spec> <declarators>
<type_spec> ::= <simple_type_spec>
| <constructed_type_spec>
<simple_type_spec> ::= <base_type_spec>
| <predefined_type_spec>
| <identifier>
<declarators> ::= <declarator> [ "," <declarator> ]
<declarator> ::= <simple_declarator>
| <complex_declarator>
<simple_declarator> ::= <identifier>
<complex_declarator> ::= <array_declarator>
| <function_ptr_declarator>
| <ptr_declarator>
<tagged_declarator> ::= <tagged_struct_declarator>
| <tagged_union_declarator>
<base_type_spec> ::= <integer_type>
| <floating_type>
| <char_type>
| <boolean_type>
| <byte_type>
| <void_type>
| <handle_type>
<floating_type> ::= "float" | "double"
<integer_type> ::= <signed_int> | <unsigned_int>
<signed_int> ::= <int_size> [ "int" ]
<unsigned_int> ::= <int_size> "unsigned" [ "int" ]
| "unsigned" <int_size> [ "int" ]
<int_size> ::= "hyper" | "long" | "short" | "small"
<char_type> ::= [ "unsigned" ] "char"
<boolean_type> ::= "boolean"
<byte_type> ::= "byte"
<void_type> ::= "void"
<handle_type> ::= "handle_t"
<constructed_type_spec> ::= <struct_type>
| <union_type>
| <tagged_declarator>
| <enumeration_type>
| <pipe_type>
<tagged_struct_declarator> ::= "struct" <tag>
| <tagged_struct>
<struct_type> ::= "struct" "{" <member_list> "}"
<tagged_struct> ::= "struct" <tag> "{" <member_list> "}"
<tag> ::= <identifier>
<member_list> ::= <member> [ <member> ]
<member> ::= <field_declarator> ";"
<field_declarator> ::= [ <field_attribute_list> ]
<type_spec> <declarators>
<field_attribute_list> ::= "[" <field_attribute> [ ","
<field_attribute>] ... "]"
<tagged_union_declarator> ::= "union" <tag>
| <tagged_union>
<union_type> ::= "union" <union_switch> "{" <union_body> "}"
| "union" "{" <union_body_n_e> "}"
<union_switch> ::= "switch" "(" <switch_type_spec> <identifier> ")"
[ <union_name> ]
<switch_type_spec> ::= <integer_type>
| <char_type>
| <boolean_type>
| <enumeration_type>
<tagged_union_declarator> ::= "union" <tag>
| <tagged_union>
<union_type> ::= "union" <union_switch> "{" <union_body> "}"
| "union" "{" <union_body_n_e> "}"
<union_switch> ::= "switch" "(" <switch_type_spec> <Identifier> ")" [ <union_name> ]
<switch_type_spec> ::= <primitive_integer_type>
| <char_type>
| <boolean_type>
| <enumeration_type>
<tagged_union> ::= "union" <tag> <union_switch> "{" <union_body> "}"
| "union" <tag> "{" <union_body_n_e> "}"
<union_name> ::= <Identifier>
<union_body> ::= <union_case> [ <union_case> ] ...
<union_body_n_e> ::= <union_case_n_e> [ <union_case_n_e> ]
<union_case> ::= <union_case_label> [ <union_case_label> ] ... <union_arm>
| <default_case>
<union_case_n_e> ::= <union_case_label_n_e> <union_arm>
| <default_case_n_e>
<union_case_label> ::= "case" <const_exp> ":"
<union_case_label_n_e> ::= "[" "case" "(" <const_exp> [ , <const_exp>] ...")" "]"
<default_case> ::= "default" ":" <union_arm>
<default_case_n_e> ::= "[" "default" "]" <union_arm>
<union_arm> ::= [ <field_declarator> ] ";"
<union_type_switch_attr> ::= "switch_type" "(" <switch_type_spec> ")"
<union_instance_switch_attr> ::= "switch_is" "(" <attr_var> ")"
<enumeration_type> ::=
"enum" "{" <identifier> [ "," <identifier> ] ... "}"
<pipe_type> ::= "pipe" <type_spec> <pipe_declarators>
<array_declarator> ::= <identifier> <array_bounds_list>
<array_bounds_list> ::= <array_bounds_declarator>
[ <array_bounds_declarator> ]
<array_bounds_declarator> ::= "[" [ <array_bound> ] "]"
| "[" <array_bounds_pair> "]"
<array_bounds_pair> ::= <array_bound> ".." <array_bound>
<array_bound> ::= "*"
| <integer_literal>
| <identifier>
<type_attribute> ::= "transmit_as" "(" <xmit_type> ")"
| "handle"
| "align" "(" <int_size> ")"
| <usage_attribute>
| <union_type_switch_attr>
| <ptr_attr>
<usage_attribute> ::= "string"
| "context_handle"
<xmit_type> ::= <simple_type_spec>
<field_attribute> ::= "first_is" "(" <attr_var_list> ")"
| "last_is" "(" <attr_var_list> ")"
| "length_is" "(" <attr_var_list> ")"
| "max_is" "(" <attr_var_list> ")"
| "min_is" "(" <attr_var_list> ")"
| "size_is" "(" <attr_var_list> ")"
| <usage_attribute>
| <union_instance_switch_attr>
| "ignore"
| <ptr_attr>
<attr_var_list> ::= <attr_var> [ "," <attr_var> ]
<attr_var> ::= [ ["*"]<identifier> ]
<ptr_declarator> ::= "*"<identifier>
<ptr_attr> ::= "ref"
| "unique"
| "full"
<op_declarator> ::= [ <operation_attributes> ]
<simple_type_spec> <identifier> <parameter_declarators>
<operation_attributes> ::= "[" <operation_attribute>
[ "," <operation_attribute> ] ... "]"
<operation_attribute> ::= "idempotent"
| "broadcast"
| "maybe"
| "reflect_deletions"
| <usage_attribute>
| <ptr_attr>
<param_declarators> ::= "(" "void" ")"
| "(" [ <param_declarator> [ "," <param_declarator> ] ... ] ")"
<param_declarator> ::= <param_attributes> <type_spec> <declarator>
<param_attributes> ::=
"[" <param_attribute> [ "," <param_attribute> ] ... "]"
<param_attribute> ::= <directional_attribute>
| <field_attribute>
<directional_attribute> ::= "in" [ "(" "shape" ")" ]
| "out" [ "(" "shape" ")" ]
<function_ptr_declarator> ::= <simple_type_spec>
"(" "*"<identifier> ")" <param_declarators>
<predefined_type_spec> ::= "error_status_t"
| <international_character_type>
<international_character_type> ::= ISO_LATIN_1
| ISO_MULTI_LINGUAL
| ISO_UCS
<pipe_declarators> ::= <pipe_declarator> [ "," <pipe_declarator> ]
<pipe_declarator> ::= <simple_declarator>
| <ptr_declarator>
More information about the samba-technical
mailing list