<SIMULATION MODEL> ::= MODEL <ModelName>
[<LABEL_definition>]
[<CONSTANT_definition>]
[<ENTITY_definition>]
[<FUNCTION_definition>]
[<MODEL_specification>]
[<CONTROL_specification>]
[<COMMENT>]
END_MODEL.

<ModelName> ::= <Identifier>

<LABEL_definition> ::= LABEL <LabelName>

<CONSTANT_definition> ::= CONST <ConstantName> = <Value>

<ENTITY_definition> ::= ENT <EntityName> : <EntityType>
<EntityType> ::= <SimpleType> | <ArrayType>
<SimpleType> ::= LOGIC| VAR | FACILITY | STORAGE | QUEUE | TABLE| CHAIN
<ArrayType> ::= ARRAY <Dimension> OF <BasicType>
<BasicType> ::= LOGIC | VAR

<FUNCTION_definition> ::= FUNCTION <FunctionName>[(<ListOfParametrers>)] := <ArithmeticExpression>

<MODEL_specification> ::= MOD_BEGIN
{<Statement_mod>}
MOD_END;
<Statement_mod> ::= [<Label> : ] <CompoundStatement> | [<Label> : ] <SimpleStatement>
<CompoundStatement> ::= BEGIN {<SimpleStatement>} END;
<SimpleStatement> ::= <BlockStatement> |<BranchStatement> | <AssignStatement>| <I/O_Statement>
<BlockStatement> ::= <ADVANCE> | <DEPART> | <ENTER> | <GENERATE> | <GATHER> | <LEAVE> |
<LINK> | <MARK> | <PRIORITY> | <QUEUE> | <RELEASE> | <SEIZE> | <SPLIT> |
<TABULATE> | <TERMINATE> | <UNLINK>
<BranchStatement> := <IF_statement> | <CASE_statement> | <TRANSFER_statement> | <WAIT_UNTIL>
<AssignStatement> ::= <SimpleType> := <ArithmeticExpresion>
<I/O_Statement> := <CLOSE> |<INPUT> | <OPEN> | <PRINT> | <REPORT> | <PLOT>

<CONTROL_specification> ::= CTRL_BEGIN
{<Statement_ctrl>}
CTRL_END
<Statement_ctrl> ::= <RESET_statement> | <CLEAR_statement> | <START_statement>
<RESET_statement> ::= RESET
<CLEAR_statement> ::= CLEAR
<START_statement> ::= <terminal_counter_value>
<terminal_counter_value> ::= <numerical_operand>

 <COMMENT> ::= <comment_start> {<symbol>} <comment_end>
<comment_start> ::= {
<comment_end> ::= }
<symbol> ::= any ASCII character

N.B. A comment can be placed anywhere between the MODEL <ModelName> and END_MODEL statements

Figure 1 - Brief format of the ISDS language syntax