Model Definition Grammar and Syntax—EBNF

The following section shows all possible grammar structures of the language used to write a model definition. It is written using the EBNF (Extended Backus–Naur form), which is a formal notation that can be used to describe other languages.

Each definition can have only one model. Reserved model names are reservations and default.

model = 'model', model_name, '{', partitions, rule*, '}' ;

model_name = quoted_string ;

partitions = 'partitions', '{', partition*, '}' ;

partition = 'partition', partition_name, '{', feature_spec*, '}' ;

partition_name = quoted_string ;

feature_spec = feature_name, feature_version, amount ;

feature_name = quoted_string ;

feature_version = major_version, [ '.', minor_version ] ;

major_version = digit+ ;

minor_version = digit+ ;

amount = integer_amount | percentage_amount | 'remainder' ;

integer_amount = digit+ ;

percentage_amount = digit+, '%' ;

rule = 'on', compound_matcher, '{', rule_body, '}' ;

compound_matcher = negatable_matcher, compound_rhs* ;

compound_rhs = compound_and_rhs | compound_or_rhs ;

compound_and_rhs AND, negatable_matcher ;

compound_or_rhs OR, negatable_matcher ;

negatable_matcher = negated_matcher | simple_matcher ;

negated_matcher = NOT, simple_matcher ;

simple_matcher = hostid_matcher | hostname_matcher | hosttype_matcher | vendor_dictionary_matcher | any_matcher ;

hostid_matcher = 'hostid', '(', parameter_list, ')' ;

hostname_matcher = 'hostname', '(', parameter_list, ')' ;

hosttype_matcher = 'hosttype', '(' parameter_list, ')' ;

vendor_dictionary_matcher = 'dictionary', '(', keyword_parameter_list, ')' ;

any_matcher = 'any', '(', ')' ;

parameter_list = parameter, (',', parameter)* ;

parameter = quoted_string ;

keyword_parameter_list = keyword_parameter, (',', keyword_parameter)* ;

keyword_parameter = keyword_key, ':', keyword_value ;

keyword_key = quoted_string ;

keyword_value = '*' | quoted_string ;

rule_body = [use_statement] [server_specified] [action] ;

use_statement = 'use', partition_name_list ;

server_specified = 'without' 'requested' 'features' '{' partition_server_specified | feature_server_specified '}' ;

partition_server_specified = 'all' 'from' partition_name_list ;

feature_server_specified = feature_spec* ;

partition_name_list = partition_name, (',', partition_name) ;

action = 'accept' | 'deny' | 'continue' ;

quoted_string = '\"" character* '\";

AND = 'and' | '&&' ;

OR = 'or | '||' ;

NOT = 'not' | '!' ;

Note:When reading the EBNF, note the following:

Optional elements are represented inside square brackets ([ ]) .
An asterisk (*) denotes that the preceding symbol or parenthesized expression may occur one or more times.
A plus sign (+) denotes that the preceding symbol or parenthesized expression may occur zero or more times.
Feature versions have the format NNNN.NN.
Strings cannot be multi-line.
Multiple feature_spec elements can optionally be separated by commas.
If a backslash character is used inside a string, it must be escaped using a second single backslash ( \\ ).
If a double-quote character is used inside a string, it must be escaped using a backslash ( \" ).