• Aucun résultat trouvé

5 Données dans le SDL

5.3 Utilisation passive des données du LDS

5.3.1 Constructions de définitions de données étendues

5.3.1.9 Syntypes

Un syntype spécifie un ensemble de valeurs d'une sorte. Un syntype utilisé comme une sorte a la même sémantique que la sorte référencée par le syntype, sauf en ce qui concerne les vérifications visant à montrer que ces valeurs appartiennent à l'ensemble des valeurs de la sorte.

Grammaire abstraite

Syntype-identifier = Identifier Syntype-definition :: Syntype-name

Parent-sort-identifier

Range-condition

Syntype-name = Name

Parent-sort-identifier = Sort-identifier Grammaire textuelle concrète

<syntype> ::=

<syntype identifier>

<syntype definition> ::=

syntype

<syntype name> = <parent sort identifier>

[ <default initialization> ] [ constants <range condition> ] endsyntype [ <syntype name> ]

| newtype <syntype name> [ <extended properties> ]

<properties expression> constants <range condition>

endnewtype [ <syntype name> ]

<parent sort identifier> ::=

<sort>

Un syntype <syntype> est une alternative pour une sorte <sort>.

Une définition <syntype definition> avec le mot clé syntype et le terme «=identificateur <syntype identifier>» est la syntaxe dérivée définie ci-après.

Une définition <syntype definition> avec le mot clé syntype dans la syntaxe concrète correspond à une définition Syntype-definition dans la syntaxe abstraite.

Lorsqu'un identificateur <syntype identifier> est utilisé comme sorte d'argument <argument sort> dans une liste

<argument list> définissant l'opérateur, la sorte pour l'argument dans une liste argument list est l'identificateur parent sort identifier du syntype.

Lorsqu'un identificateur <syntype identifier> est utilisé comme résultat pour un opérateur, la sorte du résultat result est l'identificateur parent sort identifier du syntype.

Lorsqu'un identificateur <syntype identifier> est utilisé comme qualificateur pour un nom, le qualificateur qualifier est l'identificateur parent sort identifier du syntype.

Si le mot syntype est utilisé et que la condition <range condition> est omise, toutes les valeurs de la sorte sont situées dans la condition d'intervalle.

Sémantique

Une définition de syntype définit un syntype qui se réfère à un identificateur de sorte et à une condition d'intervalle.

Spécifier un identificateur de syntype est identique à spécifier un identificateur de la sorte parente du syntype sauf en ce qui concerne les cas suivants:

a) affectation à une variable déclarée avec un syntype (voir 5.4.3);

b) sortie d'un signal si une des sortes spécifiées pour le signal est un syntype (voir 2.5.4 et 2.7.4);

c) appel d'une procédure où une des sortes spécifiées pour les variables du paramètre in de la procédure est un syntype (voir 2.7.3 et 2.4.6);

d) création d'un processus lorsque l'une des sortes spécifiées pour les paramètres de processus est un syntype (voir 2.7.2 et 2.4.4);

e) entrée d'un signal et une des variables qui est associée avec l'entrée, a une sorte qui est un syntype (voir 2.6.4);

f) utilisation dans une expression d'un opérateur qui a un syntype défini comme étant soit une sorte d'argument, soit une sorte de résultat (voir 5.3.3.2 et 5.4.2.4);

g) instruction d'initialisation ou de réinitialisation ou une expression active sur un temporisateur, une des sortes dans la définition de temporisateur étant un syntype (voir 2.8);

h) définition de variable distante ou de procédure distante si l'une des sortes pour la dérivation de signaux implicites est un syntype (voir 4.13 et 4.14);

i) paramètre de contexte formel de procédure avec un paramètre in/out dans la signature <procedure signature> correspondant à un paramètre de contexte réel où le paramètre formel correspondant ou le paramètre in/out dans la signature <procedure signature> est un syntype;

j) toute expression de valeur pour laquelle la valeur retournée sera dans l'intervalle (voir 5.4.4.6).

Par exemple, une définition <syntype definition> avec le mot clé syntype et «=identificateur <syntype identifier>» est équivalente à la substitution de l'identificateur <parent sort identifier> par l'identificateur <parent sort identifier> de la définition <syntype definition> de l'identificateur <syntype identifier>. C'est-à-dire

syntype s2 = n1 constants a1:a3 endsyntype s2;

syntype s3 = s2 constants a1:a2 endsyntype s3;

est équivalent à

syntype s2 = n1 constants a1:a3 endsyntype s2;

syntype s3 = n1 constants a1:a2 endsyntype s3;

Lorsqu'un syntype est spécifié en termes d'identificateur <syntype identifier>, les deux syntypes ne doivent pas être mutuellement définis.

Un syntype a une sorte qui est la sorte identifiée par l'identificateur de la sorte parente donnée dans la définition de syntype.

Un syntype a un domaine qui est l'ensemble des valeurs spécifiées par les constantes de la définition de syntype.

Modèle

Une définition <syntype definition> avec le mot clé newtype peut être distinguée d'une définition <partial type definition> par l'inclusion de conditions constants <range condition>. Une telle définition <syntype definition> est une abréviation d'introduction de définition <partial type definition> avec un nom anonyme, suivie par une définition

<syntype definition> avec le mot clé syntype, fondée sur ce nom anonyme. C'est-à-dire newtype X /* details */

constants /* constant list */

endnewtype X;

est équivalent à

newtype anon /* details */

endnewtype anon;

suivi par

syntype X = anon

constants /* constant list */

endsyntype X;

5.3.1.9.1 Condition d’intervalle Grammaire abstraite

Range-condition :: Or-operator-identifier

Condition-item-set

Condition-item = Open-range | Closed-range Open-range :: Operator-identifier

Ground-expression

Closed-range :: And-operator-identifier

Open-range

Open-range

Or-operator-identifier = Identifier And-operator-identifier = Identifier

Grammaire textuelle concrète

<range condition> ::=

{ <closed range> | <open range> } { , { <closed range> | <open range> } }*

<closed range> ::=

<constant> : <constant>

<open range> ::=

<constant>

| { = | /= | < | > | <= | >= } <constant>

<constant> ::=

<ground expression>

Le symbole «<» («<=», «>», «>=» respectivement) ne doit être utilisé que dans la syntaxe concrète de la condition

<range condition> si les symboles ont été définis avec une signature <operator signature>.

P, P -> package Predefined Boolean;

où P est la sorte du syntype. Ces symboles représentent un identificateur operator identifier.

Un intervalle <closed range> doit seulement être utilisé si le symbole «<=» est défini avec une signature <operator signature>.

P, P -> package Predefined Boolean;

où P est la sorte du syntype.

Une constante <constant> dans une condition <range condition> doit avoir la même sorte que la sorte du syntype.

Sémantique

Une condition d'intervalle définit une vérification d'intervalle. Une vérification d'intervalle est utilisée quand un syntype a une sémantique additionnelle à la sorte du syntype (voir 2.6.1.1, 5.3.1.9 et les cas où les syntypes ont des sémantiques différentes – voir les sections auxquelles on fait référence aux points a) à j) du 5.3.1.9, Sémantique). Une vérification d'intervalle est également utilisée pour déterminer l'interprétation d'une décision (voir 2.7.5).

La vérification d'intervalle est l'application de l'opérateur formé à partir de la condition d'intervalle. Pour les vérifications d'intervalle de syntype, l'application de cet opérateur doit être équivalente à Vrai, dans le cas contraire, le comportement ultérieur du système est indéfini. La vérification d'intervalle est obtenue comme suit:

a) Chaque élément (intervalle <open range> ou intervalle <closed range>) dans la condition <range condition> a un intervalle open range ou un intervalle closed range correspondant dans l'élément condition item.

b) Un intervalle <open range> de la forme constante <constant> est équivalent à un intervalle <open range>

de la forme = constante <constant>.

c) Pour un terme donné, A,

i) un intervalle <open range> de la forme = constante <constant>, /= constante <constant>, < constante

<constant>, <= constante <constant>, > constante <constant>, et >= constante <constant>, a des sous-termes dans la vérification d'intervalle de la forme A = constante <constant>, A/= constante

<constant>, A < constante <constant>, A <= constante <constant>, A > constante <constant>, et A >= constante <constant> respectivement;

ii) l'intervalle <closed range> de la forme constante <first constant> : constante <second constant> a un sous-terme dans la vérification d'intervalle de la forme constante <first constant> <= A and A <=

constante <second constant> où and correspond à l'opérateur and booléen prédéfini et correspond à l'identificateur And-operator-identifier dans la syntaxe abstraite.

d) Il y a un identificateur Or-operator-identifier pour l'opérateur distribué sur tous les éléments dans l'ensemble condition-item-set qui est une union booléenne or de tous les éléments. La vérification d'intervalle est le terme formé à partir de l'union booléenne or prédéfinie de tous les sous-termes obtenus à partir de la condition <range condition>.

Si un syntype est spécifié sans une condition <range condition>, la vérification d'intervalle est vraie.