16. DDL の文法

この章では、NetZ の DDL ファイルで使用されるキーワード、字句の規則、文法について説明します。

16.1. キーワード

Code 16.1 DDL キーワード
action
adapter
class
classproperty: (concrete)
dataset
doclass
doclassproperty: (code, globaldo)
dsproperty: (code, dsdecl, updatefilter)
dupspace
in
out
publisher
subscriber
title
type: (array, bool, byte, char, cstr, datetime, dohandle, double, float, int8, int16, int32, int64, list, qbuffer, qchar8, qchar16, qqueue, qmap, qresult, qbuffer, qlist, memberlist, memberqueue, membervector, real, stationurl, string, unit16, uint32, uint64, qvector, vector3d)
void
wellknown

16.2. 字句規則

Code 16.2 DDL 字句規則
identifier [a-zA-Z_][0-9a-zA-Z_]*

stringtitle \"[^\n\"]*[\"\n]

decimal_constant [1-9][0-9]*

comments "//"[^\n]*

16.2.1. DDL の文法

Code 16.3 DDL 文法
ddl_file: sentence_list

sentence_list:
sentence
    | sentence_list sentence

sentence:
    wellknown_sentence
    | title_sentence
    | dataset_decl
    | doclass_decl
    | adapter_decl
    | dupspace_decl
    | type_decl
    | property_decl
    | class_decl
    |

title_sentence:
    titletitle ';'

title:
    string

wellknown_sentence:
    wellknown identifier identifier';'

dataset_decl:
    dataset identifier'{' dataset_member_list '}' property_list_opt ';'

dataset_member_list:
    dataset_member
    | dataset_member_list dataset_member

dataset_member:
    attribute_decl ';'

attribute_decl:
    type identifierarray_size_opt

template_attribute_list:
    template_attribute_list ',' template_attribute
    | template_attribute

template_attribute:
    type

property:
    identifier

property_list:
    property_list ',' property
    | property

property_list_opt:
    property_list
    |

dupspace_decl:
    DUPSPACE IDENTIFIER ';'

type_decl:
    type_simple_decl | type_template_decl

type_simple_decl:
    TYPE IDENTIFIER ';'

type_template_decl:
    TYPE IDENTIFIER '<' template_type_list '>' ';'

type_template_list:
    template_type_list ',' template_type
    | template_type

template_type:
    IDENTIFIER { };

property_decl:
    property_decl_keyword IDENTIFIER ':' property_description ';'

property_decl_keyword:
    DSPROPERTY
    | CLASSPROPERTY
    | DOCLASSPROPERTY
    | PROPERTY

base_class_opt:
    ':' IDENTIFIER
    |

class_decl:
    CLASS IDENTIFIER base_class_opt '{' class_member_list '}'
    property_list_opt ';'

class_member_list:
    class_member_list class_member
    |

class_member:
    attribute_decl ';'

property_description:
    CODE
    | DSDECL
    | UPDATEFILTER

adapter_decl:
    adapter identifier parent_adapter_opt '';''

parent_adapter_opt:
    ';' identifier '

doclass_decl:
    doclass identifierbase_doclass_opt '{' doclass_member_list '}'
    property_list_opt ';'

base_doclass_opt:
     ':' identifier
    |

doclass_member_list:
    doclass_member
    | doclass_member_list doclass_member

doclass_member:
    dataset_attribute_decl
    | action_decl_opt
    | rmc_decl_opt
    | dupspace_reg_decl
    |

dataset_attribute_decl:
    identifier identifier';'

action_decl:
    actionaction_method_name'(' action_parameter_list_opt')'';'

action_method_name:
    identifier

action_parameter_list_opt:
    action_parameter_list
    |

action_parameter_list:
    parameter_decl
    | action_parameter_list ',' parameter_decl

parameter_decl:
    type identifier array_size_opt

rmc_decl:
    VOID rmc_method_name'(' rmc_parameter_list_opt')'';'
    | IDENTIFIER rmc_method_name '(' rmc_parameter_list_opt ')' ';'

rmc_method_name:
    identifier

rmc_parameter_list_opt:
    rmc_parameter_list
    |

rmc_parameter_list:
    rmc_parameter_decl
    | rmc_parameter_list ',' rmc_parameter_decl

rmc_parameter_decl:
    rmc_inoutspecifier_list type identifier array_size_opt

rmc_inoutspecifier_list:
    rmc_inoutspecifier
    | rmc_inoutspecifier_list rmc_inoutspecifier

rmc_inoutspecifier:
    IN
    | OUT
    |

array_size:
     '[' int_value ']'

array_size_opt:
    array_size
    |

type:
    IDENTIFIER
    | IDENTIFIER '<' template_attribute_list '>'

simple_type:
    identifier

16.3. DDL コンパイラエラー

発生する可能性のある DDL コンパイルエラーと警告、その原因を次の表にまとめました。

Table 16.1 DDL コンパイラエラーおよび警告コード
コード エラーメッセージ 原因
Error C1 Undeclared base class <identifier> <identifier> という名前のクラスが DDL で宣言されていません。
Error C2 Well-known DOClass <identifier> already used 2 つの既知クラスは同じ名前にできません。
Error C3 <identifier>ID already taken ID を複数回使用することはできません。
Error C4 Array size should be greater than 1 配列の宣言されたサイズを 1 より大きくする必要があります。
Error C7 <identifier>is incompatible with <identifier> 選択された更新識別子が相互に互換性がありません。
Error C8 Property <identifier> cannot be used in a <identifier> declaration 宣言されたプロパティがこの宣言の種類には有効ではありません。
Error C11 Title is invalid アプリケーションタイトルはカッコ内に入れる必要があります。
Error C12 Title must be specified in DDL file アプリケーションタイトルが DDL に指定されていません。指定は必須です。
Error C13 Title defined twice アプリケーションタイトルが 2 回定義されています。
Error C14 Invalid keyword <identifier> キーワード <identifier> が無効です。
Error C15 Dataset <identifier> already declared 2 つの datasets を同じ名前にすることはできません。
Error C16 DOClass<identifier> already declared 2 つの doclasses を同じ名前にすることはできません。
Error C17 A dataset can not contain a container and have an update flag of the type extrapolation_filter nor unreliable コンテナを含むデータセットは推定することも、信頼性のないチャンネルで送信することもできません。
Error C18 Dataset <identifier>can not be unreliable and larger than <max_size> bytes (-v for details) 信頼性のないチャンネルから送信されるデータセットには 3584Byte を超えるデータを含めることはできません。-v スイッチを使用して再コンパイルし、すべてのデータセットクラスのデータ使用に関する詳細を表示してください。
Error C19 予約(通常使用されません)  
Error C20 <identifier> already specified. RMC 修飾子のいずれか(in、out、in out)が 2 回指定されています。
Error C21 Dataset <identifier> contains a type that can not be extrapolated (only int32, int16, int8, float and double can). 推定されているデータセットには、int8、int16、uint16、int32、uint32、float、double のいずれかのデータ型のみを含むことができます。
Error C22 A doclass can only inherit from another doclass doclass クラスのみが別の doclass を継承できます。
Error C23 A class can only inherit from another class. 宣言されたクラス継承が無効です。クラスが別のクラスを継承するようにしてください。
Error C24 Use of an obsolete type. It has been replaced with <identifier> 有効な DDL データ型は、int、uint、int8、int16、uint16、int32、uint32、int64、uint64、char、har8、char16、float、double、bool、byte、dohandle、real、およびこれらのデータ型の配列です。特殊データ型 string とコンテナの membervector、memberlist、memberqueue もサポートされています。
Error C26 An adapter can only inherit from another adapter. adapter クラスのみが別の adapter を継承できます。
Error C28 <identifier> already declared. 変数はすでに宣言されています DOClass、Dataset、type などは DDL ファイルと同じ名前にはできません。
Error C29 Type <identifier> is unknown. 宣言されたデータ型が不明であるか無効です。
Error C30 <identifier> is not a type. <identifier> は有効なデータ型ではありません。
Error C32 Datasets with a loopback must use an extrapolation filter. ループバックは推定されているデータセットのみに指定できます。
Error C33 Property <identifier> is unknown. 宣言された更新ポリシーが不明であるか無効です。
Error C34 Invalid syntax using cstr type. Array required. cstr 型には array のデータ型が必要です。
Error C35 cstr cannot be used as a return type. cstr は返り値のデータ型には使用できません。別のデータ型を使用してください。
Error C36 cstr cannot be used as a container type. cstr は有効なコンテナのデータ型ではありません。別のデータ型を使用してください。
Error C37 <identifier> is not a template type. このデータ型はテンプレートのデータ型ではありません。
Error C38 Incorrect number of template arguments using type <identifier>. 引数に間違った数が指定されています。
Error C50 <identifier>near <identifier> 構文エラー。