• Aucun résultat trouvé

5 Données dans le SDL

5.2 Le langage de noyau de données

5.2.1 Définitions des types de données

A un point quelconque d'une spécification SDL, il y a une définition applicable de type de données. La définition de type de données définit la validité des expressions et les relations entre les expressions. La définition introduit des opérateurs et des ensembles de valeurs (sorte).

Il n'y a pas de correspondance simple entre la syntaxe concrète et la syntaxe abstraite pour les définitions des types de données car la syntaxe concrète introduit la définition du type de données de façon progressive en insistant sur les sortes (voir également l'Annexe C).

Les définitions dans la syntaxe concrète sont souvent interdépendantes et ne peuvent être séparées dans différentes unités de portée. Par exemple:

newtype even literals 0;

operators

plusee : even, even -> even;

plusoo : odd, odd -> even;

axioms

plusee(a,0) == a;

plusee(a,b) == plusee(b,a);

plusoo(a,b) == plusoo(b,a);

endnewtype even; /* even "numbers" with plus–depends on odd */

newtype odd literals 1;

operators

plusoe : odd, even -> odd;

pluseo : even, odd -> odd;

axioms

plusoe(a,0) == a;

pluseo(a,b) == plusoe(b,a);

endnewtype odd; /*odd "numbers" with plus - depends on even*/

Chaque définition de type de données est complète, il n'y a pas de référence aux sortes ou aux opérateurs qui ne sont pas inclus dans la définition du type de données qui s'applique à un point donné. Une définition de type de données doit également ne pas invalider la sémantique de la définition de type de données dans l'unité de portée immédiatement englobante. Un type de données dans une unité de portée englobée enrichit seulement les opérateurs des sortes définies dans l'unité de portée extérieure. Une valeur d'une sorte définie dans une unité de portée peut être librement utilisée et transférée entre ou à partir d'unités de portée hiérarchiquement inférieures. Puisque les données prédéfinies sont définies dans un progiciel prédéfini et implicitement utilisé, les sortes prédéfinies (par exemple booléennes ou entières) peuvent être librement utilisées dans le système.

Grammaire abstraite

Data-type-definition :: Sorts

Signature-set

Equations

Sorts = Sort-name-set

Sort-name = Name

Equations = Equation-set

Une définition data type definition ne doit pas ajouter de nouvelles valeurs à une sorte du type de données du genre

<scope unit kind> englobant.

Si un terme (voir 5.2.3) est non équivalent à un autre terme selon le type de données qui s'applique dans le genre <scope unit kind> environnant, ces termes ne doivent pas être définis comme étant équivalents par la définition data type definition.

Grammaire textuelle concrète

<partial type definition> ::=

newtype <sort name>

[<formal context parameters>]

[ <extended properties> ] <properties expression>

endnewtype [ <sort name> ]

<properties expression> ::=

<operators>

{ <internal properties>

| <external properties> } [ <default initialization>]

<internal properties> ::=

[ <operator definitions> ]

[ axioms <axioms> ] [ <literal mapping> ]

Un paramètre <formal context parameter> des paramètres <formal context parameters> doit être soit un paramètre <sort context parameter> ou un paramètre <synonym context parameter>.

Les paramètres <formal context parameters>, les propriétés <extended properties>, les définitions <operator definitions>, les propriétés <external properties>, la correspondance <literal mapping> et l'initialisation <default initialization> font partie du noyau des données.

La définition data type definition est représentée par l'ensemble de toutes les définitions <partial type definition> dans la catégorie <scope unit kind> courante associée avec la définition data type definition de la catégorie <scope unit kind>

environnante.

Chacune des catégories <scope unit kind> suivantes représente un point dans la syntaxe abstraite qui contient une définition data type definition: définition <system definition>, définition <block definition>, définition <process definition>, définition <service definition>, définition <procedure definition>, définition <channel substructure definition> ou définition <block substructure definition> ou les diagrammes correspondants dans la syntaxe graphique.

La définition <partial type definition> dans une définition <system type definition>, <block type definition>, <process type definition> ou <service type definition> est transformée en définition <partial type definition> dans l'instance résultante (ou l'ensemble d'instances résultant) lorsque le type est instancié.

Les sortes pour une catégorie <scope unit kind> sont représentées par l'ensemble des noms <sort name> introduits par l'ensemble des définitions <partial type definition> de la catégorie <scope unit kind>.

L'ensemble des signatures signature et les équations equations pour une catégorie <scope unit kind> sont représentées par les expressions <properties expression> des définitions <partial type definition> de la catégorie <scope unit kind>.

Les opérateurs <operator> d'une expression <properties expression> représentent une partie de l'ensemble signature dans la syntaxe abstraite. L'ensemble complet signature est l'union des ensembles signature définis par les définitions

<partial type definition> dans la catégorie <scope unit kind>.

Les axiomes <axioms> d'une expression <properties expression> représentent la partie de l'ensemble equation dans la syntaxe abstraite. Les équations equations sont l'union des ensembles d'équations définis par la définition <partial type definition> dans la catégorie <scope unit kind>.

Les sortes de données prédéfinies ont leurs définitions <partial type definition> implicites dans le progiciel Predefined dans l'Annexe D.

Sémantique

La définition de type de données définit un type de données. Un type de données a un ensemble de propriétés de type, c'est-à-dire: un ensemble de sortes, un ensemble d'opérateurs et un ensemble d'équations.

Les propriétés des types de données sont définies dans la syntaxe concrète par des définitions partielles de type. Une définition partielle de type ne produit pas toutes les propriétés du type de données mais définit partiellement certaines des propriétés. On peut obtenir les propriétés complètes d'un type de données par combinaison de toutes les définitions partielles de type qui s'appliquent à l'intérieur de l'unité de portée contenant la définition du type de données.

Une sorte est un ensemble de valeurs de données. Deux sortes différentes n'ont aucune valeur en commun.

La définition de type de données est formée à partir de la définition de type de données de l'unité de portée définissant l'unité de portée courante prise avec les sortes, les opérateurs et les équations définis dans l'unité de portée courante.

Sauf à l'intérieur d'une définition <partial type definition> ou d'un affinage <signal refinement>, la définition de type de données qui s'applique en un point quelconque est le type de données défini pour l'unité de portée qui englobe immédiatement ce point. A l'intérieur d'une définition <partial type definition> ou d'un affinage <signal refinement>, la définition de type de données qui s'applique est la définition de type de données de l'unité de portée englobant respectivement la définition <partial type definition> ou <signal refinement>.

L'ensemble des sortes d'un type de données est l'union de l'ensemble des sortes introduites dans l'unité de portée courante et de l'ensemble des sortes de type de données qui s'appliquent dans le genre <scope unit kind> environnant. L'ensemble des opérateurs d'un type de données est l'union de l'ensemble des opérateurs introduits dans l'unité de portée courante et de l'ensemble des opérateurs du type de données qui s'appliquent dans le genre <scope unit kind> environnant.

L'ensemble des équations d'un type de données est l'union de l'ensemble des équations introduites dans l'unité de portée courante et de l'ensemble des équations du type de données qui s'appliquent dans le genre <scope unit kind>

environnant.

Chaque sorte introduite dans une définition de type de données a un identificateur qui est le nom introduit par une définition partielle de type dans l'unité de portée désignée par l'identificateur de l'unité de portée.

5.2.2 Littéraux et opérateurs paramétrisés