ページの先頭行へ戻る
Interstage Application Server アプリケーション作成ガイド(CORBAサービス編)
Interstage

A.9 IDLのフォーマット

IDLの書式のフォーマットを以下に示します。::= は、以下のように定義されます。

|       または
<文字>     非終端文字
"文字"   リテラル
*        記号の前にある構文の要素を0回以上繰り返すことができます。
+        記号の前にある構文の要素を1回以上繰り返すことができます。
{}       { }で括られた構文の要素は1つの要素として取り扱われます。
[]       [ ]で括られた構文の要素はオプションで、0回以上現れます。
IDL仕様
<specification>      ::=<definition>+

IDLの定義
<definition>         ::=<type_dcl>";"
                     | <const_dcl>";"
                     | <except_dcl>";"
                     | <interface>";"
                     | <module>";"

モジュール宣言
<module>             ::="module"<identifier>"{"<definition>"+}"

インタフェース宣言
<interface>          ::=<interface_dcl>
                     | <forward_dcl>
<interface_dcl>      ::=<interface_header>"{"<interface_body>"}"
<forward_dcl>        ::="interface"<identifier>
<interface_header>   ::="interface"<identifier>[<inheritance_spec>]
<interface_body>     ::=<export>*
<export>             ::=<type_dcl>";"
                     | <const_dcl>";"
                     | <except_dcl>";"
                     | <attr_dcl>";"
                     | <op_dcl>";"

継承の仕様
<inheritance_spec>   ::="":"<scoped name>{","<scoped name>}*
<scoped_name>        ::=<identifier>
                     | "::"<identifier>
                     | <scoped_name>"::"<identifier>

定数宣言
<const_dcl>          ::="const"<const_type><identifier>"="<const_exp>
<const_type>         ::=<integer_type>
                     | <char_type>
                     | <boolean_type>
                     | <floating_pt_type>
                     | <string_type>
                     | <scoped_name>

定数式
<const_exp>          ::=<or_expr>
<or_expr>            ::=<xor_expr>
                     | <or_expr>"|"<xor_expr>
<xor_expr>           ::=<and_expr>
                     | <xor_expr>"^"<and_expr>
<and_expr>           ::=<shift_expr>
                     | <add_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>
                     | <character_literal>
                     | <floating_literal>
                     | <boolean_literal>
<boolean_literal>    ::="TRUE"
                     | "FALSE"
<positive_int_const> ::=<const_exp>

型宣言
<type_dcl>            ::="typedef"<type_declarator>
                      | <struct_type>
                      | <union_type>
                      | <enum_type>
<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>
<template_type_spec>  ::=<sequence_type>
                      | <string_type>
                      | <wide_string_type>
                      | <fixed_pt_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_long_int>
                      | <signed_short_int>
                      | <signed_longlong_int>
<signed_long_int>     ::="long"
<signed_short_int>    ::="short"
<signed_longlong_int> ::="long""long"
<unsigned_int>        ::=<unsigned_long_int>
                      | <unsigned_short_int>
<unsigned_long_int>   ::="unsigned""long"
<unsigned_short_int>  ::="unsigned""short"
<char_type>           ::="char"
<wide_char_type>      ::="wchar"
<boolean_type>        ::="boolean"
<octet_type>          ::="octet"
<struct_type>         ::="struct"<identifier>"{"<member_list>"}"
<member_list>         ::=<member>+
<member>              ::=<type_spec><declarator>";"
<union_type>          ::="union"<identifier>"switch"
                      "("<switch_type_spec>")"
                      "{"<switch_body>"}"
<switch_type_spec>    ::=<integer_type>
                      | <char_type>
                      | <boolean_type>
                      | <enum_type>
                      | <scoped_name>
<switch_body> ::=<case>+
<case>                ::=<case_label>+<element_spec>";"
<case_label>          ::="case"<const_exp>";"
                      | "default"";"
<element_spec>        ::=<type_spec><declarators>
<sequence_type>       ::="sequence""<"<simple_type_spec>","
                      <positive_int_const>">"
                      | "sequence""<"<simple_type_spec>>","
<string_type>         ::="string""<"<positive_int_const>">"
                      | "string"
<wide_string_type>    ::="wstring""<"<positive_int_const>">"
                      | "wstring"
<fixed_pt_type>       ::="fixed""<"<positive_int_const>","<integer_literal>">"
<array_declarator>    ::=<indentifier><fixed_array_size>+
<fixed_array_size>    ::="["<positive_int_const>"]"
<attr_dcl>            ::=["readonly"]"attribute"<param_type_spec>
                      <simple_declarator>{"."<simple_declarator>}*

例外宣言
<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>
                      | <fixed_pt_type>
                      | <scoped_name>