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 コンパイルエラーと警告、その原因を次の表にまとめました。
コード | エラーメッセージ | 原因 |
---|---|---|
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_ |
コンテナを含むデータセットは推定することも、信頼性のないチャンネルで送信することもできません。 |
Error C18 | Dataset <identifier>can not be unreliable and larger than <max_ |
信頼性のないチャンネルから送信されるデータセットには 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> | 構文エラー。 |