Статус документа
Статус документа

ГОСТ Р ИСО 10303-11-2009 Системы автоматизации производства и их интеграция. Представление данных об изделии и обмен этими данными. Часть 11. Методы описания. Справочное руководство по языку EXPRESS

     A.2 Грамматические правила


Представленные ниже правила определяют, как рассмотренные выше лексические элементы могут объединяться в конструкции языка EXPRESS. Пробелы и/или комментарии могут помещаться между любыми двумя лексемами в данных правилах. Первичным синтаксическим правилом языка EXPRESS является syntax.

164

abstract_entity_declaration = ABSTRACT .

165

abstract_supertype = ABSTRACT SUPERTYPE ' ; ' .

166

abstract_supertype_declaration = ABSTRACT SUPERTYPE [

subtype_constraint ] .

167

actual_parameter_list = ' ( ' parameter { ' , ' parameter } ' ) ' .

168

add_like_op = ' + ' | ' - ' | OR | XOR .

169

aggregate_initializer = ' [ ' [ element { ' , ' element } ] ' ] ' .

170

aggregate_source = simple_expression .

171

aggregate_type = AGGREGATE [ ' : ' type_label ] OF parameter_type .

172

aggregation_types = array_type | bag_type | list_type | set_type .

173

algorithm_head = { declaration } [ constant_decl ] [ local_decl ] .

174

alias_stmt = ALIAS variable_id FOR general_ref { qualifier } ' ; '

stmt { stmt } END_ALIAS ' ; ' .

175

array_type = ARRAY bound_spec OF [ OPTIONAL ] [ UNIQUE ]

instantiable_type .

176

assignment_stmt = general_ref { qualifier } ' := ' expression ' ; ' .

177

attribute_decl = attribute_id | redeclared_attribute .

178

attribute_id = simple_id .

179

attribute_qualifier = ' . ' attribute_ref .

180

bag_type = BAG [ bound_spec ] OF instantiable_type .

181

binary_type = BINARY [ width_spec ].

182

boolean_type = BOOLEAN .

183

bound_1 = numeric_expression .

184

bound_2 = numeric_expression .

185

bound_spec = ' [ ' bound 1 ' : ' bound 2 ' ] ' .

186

built_in_constant = CONST_E | PI | SELF | ' ? ' .

187

built_in_function = ABS | ACOS | ASIN | ATAN | BLENGTH | COS |

EXISTS | EXP | FORMAT | HIBOUND | HIINDEX |

LENGTH | LOBOUND | LOINDEX | LOG | LOG2 |

LOG10 | NVL | ODD | ROLESOF | SIN | SIZEOF |

SORT | TAN | TYPEOF | USEDIN | VALUE |

VALUE_IN | VALUE_UNIQUE .

188

built_in_procedure = INSERT | REMOVE .

189

case_action = case_label { ' , ' case_label } ' : ' stmt .

190

case_label = expression .

191

case_stmt = CASE selector OF { case_action } [ OTHERWISE ' : ' stmt ]

END_CASE ' ; ' .

192

compound_stmt = BEGIN stmt { stmt } END ' ; ' .

193

concrete_types = aggregation_types | simple_types | type_ref .

194

constant_body = constant_id ' : ' instantiable_type ' := '

expression ' ; ' .

195

constant_decl = CONSTANT constant_body { constant_body }

 END_CONSTANT ' ; ' .

196

constant_factor = built_in_constant | constant_ref .

197

constant_id = simple_id .

198

constructed_types = enumeration_type | select_type .

199

declaration = entity_decl | function_decl | procedure_decl |

                        subtype_constraint_decl | type_decl .

200

derived_attr = attribute_decl ' : ' parameter_type ' := ' expression

' ; ' .

201

derive_clause = DERIVE derived_attr { derived_attr } .

202

domain_rule = [ rule_label_id ' : ' ] expression .

203

element = expression [ ' : ' repetition ] .

204

entity_body = { explicit_attr } [ derive_clause ]

[ inverse_clause ] [ unique_clause ]

[ where_clause ] .

205

entity_constructor = entity_ref ' ( ' [ expression { ' , '

expression } ] ' ) ' .

206

entity_decl = entity_head entity_body END_ENTITY ' ; ' .

207

entity_head = ENTITY entity_id subsuper ' ; ' .

208

entity_id = simple_id .

209

enumeration_extension = BASED_ON type_ref [ WITH

enumeration_items ] .

210

enumeration_id = simple_id .

211

enumeration_items = ' ( ' enumeration_id { ' , ' enumeration_id } ' ) ' .

212

enumeration_reference = [ type_ ref ' . ' ] enumeration_ref .

213

enumeration_type = [ EXTENSIBLE ] ENUMERATION [ ( OF

enumeration_items ) | enumeration_extension ] .

214

escape_stmt = ESCAPE ' ; ' .

215

explicit_attr = attribute_decl { ' , ' attribute_decl } ' : '

[ OPTIONAL ] parameter_type ' ; ' .

216

expression = simple_expression [ rel_op_extended

 simple_expression ] .

217

factor = simple_factor [' ** ' simple_factor ] .

218

formal_parameter = parameter_id {' , ' parameter_ id } ' : '

  parameter_type .

219

function_call = ( built_in_function | function_ref )

[ actual_parameter_ list ] .

220

function_decl = function_head algorithm_head stmt { stmt }

 END_FUNCTION ' ; ' .

221

function_head = FUNCTION function_id [ ' ( ' formal_parameter

 { ' ; ' formal_parameter } ' ) ' ] ' : '

 parameter_type ' ; ' .

222

function_id = simple_id .

223

generalized_types = aggregate_type | general_aggregation_types |

generic_entity_type | generic_type .

224

general_aggregation_types = general_array_type |

general_bag_type | general_list_type |

general_set_type .

225

general_array_type = ARRAY [ bound_spec ] OF [ OPTIONAL ]

[ UNIQUE ] parameter_type .

226

general_bag_type = BAG [ bound_ spec ] OF parameter_type .

227

general_list_type = LIST [ bound_spec ] OF [ UNIQUE ]

parameter_type .

228

general_ref = parameter_ref | variable_ref .

229

general_set_type = SET [ bound_spec ] OF parameter_type .

230

generic_entity_type = GENERIC_ENTITY [ ' : ' type_label ].

231

generic_type = GENERIC [ ' : ' type_label ].

232

group_qualifier = ' \' entity_ref .

233

if_stmt = IF logical_expression THEN stmt { stmt } [ ELSE stmt

{ stmt } ] END_IF ' ; ' .

234

increment = numeric_expression .

235

increment_control = variable_id ' := ' bound_1 TO bound_2 [ BY

increment ] .

236

index = numeric_expression .

237

index_1 = index .

238

index_2 = index .

239

index_qualifier = ' [ ' index_1 [ ' : ' index_2 ] ' ] ' .

240

instantiable_type = concrete_types | entity_ref .

241

integer_type = INTEGER .

242

interface_specification = reference_clause | use_clause .

243

interval = ' { ' interval_low interval_op interval_item

interval_op interval_high ' } ' .

244

interval_high = simple_expression .

245

interval_item = simple_expression .

246

interval_low = simple_expression .

247

interval_op = ' < ' | ' <= ' .

248

inverse_attr = attribute_decl ' : ' [ ( SET | BAG ) [ bound_spec ]

OF ] entity_ref FOR [ entity_ref ' . ' ]

attribute_ref ' ; ' .

249

inverse_clause = INVERSE inverse_attr { inverse_attr } .

250

list_type = LIST [ bound_spec ] OF [ UNIQUE ] instantiable_type .

251

literal = binary_literal | logical_literal | real_literal |

string_literal .

252

local_decl = LOCAL local_variable { local_variable }

END_LOCAL ' ; ' .

253

local_variable = variable_id { ' , ' variable_id } ' : '

parameter_type [ ' := ' expression ] ' ; ' .

254

logical_expression = expression .

255

logical_literal = FALSE | TRUE | UNKNOWN .

256

logical_type = LOGICAL .

257

multiplication_like_op = ' * ' | ' / ' | DIV | MOD | AND | ' || ' .

258

named_types = entity_ref | type_ref .

259

named_type_or_rename = named_types [ AS ( entity_id | type_id ) ] .

260

null_stmt = ' ; ' .

261

number_type = NUMBER .

262

numeric_expression = simple_expression .

263

one_of = ONEOF ' ( ' supertype_expression { ' , '

supertype_expression } ' ) ' .

264

parameter = expression .

265

parameter_id = simple_id .

266

parameter_type = generalized_types | named_types | simple_types.

267

population = entity_ref.

268

precision_spec = numeric_expression .

269

primary = literal | ( qualifiable_factor { qualifier } ) .

270

procedure_call_stmt = ( built_in_procedure | procedure_ref )

[ actual_parameter_list ] ' ; ' .

271

procedure_decl = procedure_ head algorithm_head { stmt }

END_PROCEDURE ' ; ' .

272

procedure_head = PROCEDURE procedure_id [ ' ( ' [ VAR ]

formal_parameter { ' ; ' [ VAR ]

formal_parameter } ' ) ' ] ' ; ' .

273

procedure_id = simple_id .

274

qualifiable_factor = attribute_ref | constant_factor |

function_call | general_ref | population .

275

qualified_attribute = SELF group_qualifier attribute_qualifier .

276

qualifier = attribute_qualifier | group_qualifier |

index_qualifier .

277

query_expression = QUERY ' (' variableid ' <* ' aggregate_source ' | '

logical_expression ' ) ' .

278

real_type = REAL [ ' (' precision_spec' ) ' ] .

279

redeclared_attribute = qualified_attribute [ RENAMED

attribute_id ] .

280

referenced_attribute = attribute_ref | qualified_attribute .

281

reference_clause = REFERENCE FROM schema_ref [ ' ('

resource_or_rename { ' , ' resource_or_rename }

' ) ' ] ' ; ' .

282

rel_op = ' < ' | ' > ' | ' <= ' | ' >= ' | ' <> ' | ' = ' | ' :<>: ' | ' :=: ' .

283

rel_op_extended = rel_op | IN | LIKE .

284

rename_id = constant_id | entity_id | function_id | procedure_id |

type_id .

285

repeat_control = [ increment_control ] [ while_control ]

 [ until_control ] .

286

repeat_stmt = REPEAT repeat_control ' ; ' stmt { stmt }

END_REPEAT ' ; ' .

287

repetition = numeric_expression .

288

resource_or_rename = resource_ref [ AS rename_id ] .

289

resource_ref = constant_ref | entity_ref | function_ref |

                            procedure_ref | type_ref .

290

return_stmt = RETURN [ ' (' expression ' ) ' ] ' ; ' .

291

rule_decl = rule_head algorithm_head { stmt } where_ clause

END_RULE ' ; ' .

292

rule_head = RULE rule_id FOR ' (' entity_ref { ' , ' entity_ref }

' ) ' ' ; ' .

293

rule_id = simple_id .

294

rule_label_id = simple_id .

295

schema_body = { interface_specification } [ constant_decl ]

 { declaration | rule_decl } .

296

schema_decl = SCHEMA schema_id [ schema_ version_ id ] ' ; '

schema_body END_SCHEMA ' ; ' .

297

schema_id = simple_id .

298

schema_version_id = string_literal .

299

selector = expression .

300

select_extension = BASED_ON type_ref [ WITH select_list ] .

301

select_list = ' ( ' named_types { ' , ' named_types } ' ) ' .

302

select_type = [ EXTENSIBLE [GENERIC_ENTITY ] ] SELECT

[ select_list | select_extension ] .

303

set_type = SET [ bound_spec ] OF instantiable_type .

304

sign = ' + ' | ' - ' .

305

simple_expression = term { add_like op_term } .

306

simple_factor = aggregate_initializer | entity_constructor |

enumeration_reference | interval |

query_expression | ( [ unary_op ] ( ' ( '

expression ' ) ' | primary ) ) .

307

simple_types = binary_type | boolean_type | integer_type |

logical_type | number_type | real_type |

string_type .

308

skip_stmt = SKIP ' ; ' .

309

stmt = alias_stmt | assignment_stmt | case_stmt | compound_stmt |

escape_stmt | if_stmt | null_stmt | procedure_call_stmt |

repeat_stmt | return_stmt | skip_stmt .

310

string_literal = simple_string_literal | encoded_string_literal .

311

string_type = STRING [ width_spec ].

312

subsuper = [ supertype_constraint ] [ subtype_declaration ] .

313

subtype_constraint = OF ' ( ' supertype_expression ' ) ' .

314

subtype_constraint_body

=

[ abstract_supertype ] [ total_over ]

[ supertype_expression ' ; ' ] .

315

subtype_constraint_decl

=

subtype_constraint_head

subtype_constraint_body

END_SUBTYPE_CONSTRAINT ' ; ' .

316

subtype_constraint_head

=

SUBTYPE_CONSTRAINT

subtype_constraint_id FOR entity_ref

' ; ' .

317

subtype_constraint_id = simple_id .

318

subtype_declaration = SUBTYPE OF ' ( ' entity_ref  { ' , ' entity_ref

} ' ) ' .

319

supertype_constraint

=

abstract_entity_declaration |

abstract_supertype_declaration |

supertype_rule .

320

supertype_expression

=

supertype_factor { ANDOR

supertype_factor } .

321

supertype_factor = supertype_term { AND supertype_term } .

322

supertype_rule = SUPERTYPE subtype_constraint .

323

supertype_term = entity_ref | one_of | ' ( ' supertype_expression

' ) ' .

324

syntax = schema_decl { schema_decl } .

325

term = factor { multiplication_like_op factor } .

326

total_over = TOTAL_OVER ' ( ' entity_ref { ' , ' entity_ref } ' ) ' ' ; ' .

327

type_decl = TYPE type_id ' = ' underlying_type ' ; ' [ where_clause ]

 END_TYPE ' ; ' .

328

type_id = simple_id .

329

type_label = type_label_id | type_label_ref.

330

type_label_id = simple_jd .

331

unary_op = ' + ' | ' -' | NOT .

332

underlying_type = concrete_types | constructed_types .

333

unique_clause = UNIQUE unique_rule ' ; ' { unique_rule ' ; ' } .

334

unique_rule = [ rule_label_id ' : ' ] referenced_attribute { ' , '

referenced_attribute } .

335

until_control = UNTIL logical_expression .

336

use_clause = USE FROM schema_ref [ ' ( ' named_type_or_rename

{ ' , ' named_type_or_rename } ' ) ' ] ' ; ' .

337

variable_id = simple_id .

338

where_clause = WHERE domain_rule ' ; ' { domain_rule ' ; ' } .

339

while_control = WHILE logical_expression .

340

width = numeric_expression .

341

width_spec = ' ( ' width ' ) ' [ FIXED ].