• Aucun résultat trouvé

2 Le SDL de base

2.4 Structure du système

2.4.1 Organisation des spécifications SDL

Une <sdl specification> peut être décrite comme une <system definition> monolithique ou comme une collection de

<package> et de <referenced definition>. Un <package> permet l'utilisation des définitions dans différents contextes en

«utilisant» le package dans ces contextes, c'est-à-dire dans des systèmes ou des progiciels qui peuvent être indépendants.

Une <referenced definition> est une définition qui a été déplacée de son contexte de définition pour avoir une vue d'ensemble à l'intérieur d'une description de système. Elle est similaire à une définition de macro (voir 4.2) mais elle est

«insérée» en une place unique (le contexte de définition) utilisant une référence.

Grammaire concrète

<sdl specification> ::=

<package list> [ <system definition> {<referenced definition>}* ]

2.4.1.2 Progiciel

Afin qu'une définition de type puisse être utilisée dans des systèmes différents, elle doit être définie comme une partie d'un progiciel.

Les définitions qui font partie d'un progiciel définissent des types, des générateurs de données, des listes de signaux, des spécifications distantes et des synonymes.

Les définitions à l'intérieur d'un progiciel sont rendues visibles à un système ou à un autre progiciel par une clause de référence de progiciel (package reference clause).

Grammaire textuelle concrète

<package list> ::=

{ <package> {<referenced definition>}* }*

<package> ::=

<package definition> | <package diagram>

<package definition> ::=

{<package reference clause>}*

package <package name>

[<interface>] <end>

{<entity in package>}*

endpackage [<package name>] <end>

<entity in package> ::=

<system type definition>

| <textual system type reference>

| <block type definition>

| <textual block type reference>

| <process type definition>

| <textual process type reference>

| <procedure definition>

| <remote procedure definition>

| <textual procedure reference>

| <signal definition>

| <signal list definition>

| <service type definition>

| <textual service type reference>

| <select definition>

| <remote variable definition>

| <data definition>

| <macro definition>

<package reference clause> ::=

use <package name> [ / <definition selection list> ] <end>

<definition selection list> ::=

<definition selection> {, <definition selection>}*

<definition selection> ::=

[<entity kind>] <name>

<entity kind> ::=

system type

| block type

| process type

| service type

| signal

| procedure

| newtype

| signallist

| generator

| synonym

| remote

<interface> ::=

interface <definition selection list>

newtype est également utilisé pour sélectionner un nom de type synonyme dans un progiciel. La classe <entity kind>

remote est utilisée pour la sélection d'une définition de variable distante.

Grammaire graphique concrète

<package diagram> ::=

<package reference area>

is associated with

<frame symbol> contains

{ <package heading>

{{<package text area>}*

{<diagram in package> }*} set }

<package reference area> ::=

<text symbol> contains {<package reference clause>}*

<package heading> ::=

package <package name> [<interface>]

<package text area> ::=

<text symbol> contains

{ <entity in package>}*

<diagram in package> ::=

<system type diagram>

| <system type reference>

| <type in system area>

| <macro diagram>

| <option area>

La <package reference area> doit être placée en tête du <frame symbol>.

Sémantique

Pour chaque <package name> mentionné dans une <package reference clause>, un <package> correspondant doit exister. Si ce <package> ne fait pas partie d'une <package list>, il doit exister un mécanisme d'accès au <package>

référencé, comme s'il s'agissait d'une partie textuelle de la <package list>. La présente Recommandation ne définit pas ce mécanisme.

De même, si la définition <system definition> est omise dans une <sdl specification>, il doit exister un mécanisme permettant d'utiliser les <package> de la >package list> dans d'autres <sdl specification>. Avant d'utiliser la <package list> dans d'autres <sdl specification>s, le modèle des macros et des définitions référencées est appliqué. La présente Recommandation ne définit pas ce mécanisme.

Le nom d'une entité définie à l'intérieur d'un <package> est visible pour un autre <package> si et seulement si:

1) le <package> ou la <system definition> possède une <package reference clause> qui mentionne le

<package> et la <definition selection list> de la <package reference clause> est omise ou le nom est mentionné dans une <definition selection>; et

2) l'<interface> du <package> définissant le nom est omise, ou bien le nom est mentionné dans l'<interface>.

La résolution par contexte dans les expressions tiendra également compte des sortes dans les progiciels qui ne sont pas rendues visibles par une <package reference clause>. Les signaux qui ne sont pas rendus visibles dans une clause use peuvent faire partie d'une liste de signaux via un <signal list identifier> rendu visible dans une clause use. Ces signaux pourront alors affecter l'ensemble complet de signaux d'entrée valides d'un processus ou d'un service.

Si un nom dans une <definition selection> désigne une <sort>, la <definition selection> désigne aussi implicitement tous les littéraux et opérateurs définis pour la <sort> ou l'identificateur <parent sort identifier> dans le cas d'un type synonyme.

Si un nom dans une <definition selection> désigne un signal, la <definition selection> désigne aussi implicitement tous les sous-signaux de ce signal.

La référence aux noms ayant leur occurrence de définition dans un <package> se fait au moyen d'identificateurs

<identifier> ayant le package <package name> comme le <path item> le plus à gauche. Toutefois, le <path item> peut être omis si le <package name> désigne le progiciel englobant, si la paire (le nom, le genre d'entité) est visible uniquement d'un seul progiciel, ou si la résolution par contexte s'applique.

Le genre <entity kind> dans une <definition selection> désigne le genre d'entité de <name>. Toute paire (<entity kind>,<name>) doit être distincte à l'intérieur d'une <definition selection list>. Pour une <definition selection> dans une

<interface>, le genre <entity kind> peut être omis uniquement s'il n'y a pas d'autre nom ayant son occurrence de définition directement dans le <package>. Pour une <definition selection> dans une <package reference clause>, <entity kind> peut être omis si et seulement si exactement une entité de ce nom est mentionnée dans n'importe quelle <definition selection list> pour le progiciel, ou si le progiciel n'a pas de <definition selection list> et contient directement une définition unique de ce nom.

Une définition <system definition> et toute définition <package definition> possède une <package reference clause>

implicite:

use Predefined;

où Predefined désigne un progiciel contenant les données prédéfinies selon l'Annexe D.

Modèle

Si un progiciel est mentionné dans plusieurs <package reference clause> d'un <package definition>, cela correspond à une <package reference clause> qui sélectionne l'union des définitions choisies dans les <package reference clause>.

Une <sdl specification> avec une définition <system definition> et une <package list> non vide correspond à une

<system definition> où

1) toutes les occurrences du même nom (y compris l'occurrence de définition) d'une entité définie dans un

<package> ont été renommées par le même nom unique et anonyme;

2) toutes les définitions à l'intérieur des <package> ont été incluses au niveau du système;

3) toutes les occurrences de package <package name> dans les qualificateurs ont été remplacées par system

<system name>, où <system name> est le nom utilisé pour la définition <system definition>.

La transformation est expliquée en détail en 7. La relation entre <system definition> et Grammaire abstraite est définie en 2.4.2.

2.4.1.3 Définitions référencées Grammaire concrète

<referenced definition> ::=

<definition> | <diagram>

<system definition> ::=

{<textual system definition> | <system diagram>}

<definition> ::=

<system type definition>

| <block definition>

| <block type definition>

| <process definition>

| <process type definition>

| <service definition>

| <service type definition>

| <procedure definition>

| <block substructure definition>

| <channel substructure definition>

| <macro definition>

| <operator definition>

<diagram> ::=

<system type diagram>

| <block diagram>

| <block type diagram>

| <process diagram>

| <process type diagram>

| <service diagram>

| <service type diagram>

| <procedure diagram>

| <block substructure diagram>

| <channel substructure diagram>

| <macro diagram>

| <operator diagram>

Pour chaque <referenced definition>, sauf pour des <macro definition> et des <macro diagram>, on doit avoir une référence dans le <package> ou la <system definition> associé.

Dans une <referenced definition>, un <identifier> est placé immédiatement après le(s) mot(s) clé(s) initial (initiaux).

Pour chaque référence, il doit exister une <referenced definition> avec le même genre d'entité que la référence, dont le

<qualifier>, s'il est présent, désigne un trajet à partir de l'unité de portée englobant la référence jusqu'à la référence. Si deux <referenced definition> du même genre d'entité ont le même nom, le <qualifier> d'un des identificateurs

<identifier> ne doit pas constituer la partie la plus à gauche de l'autre <qualifier>.

On ne peut pas spécifier un <qualifier> dans l'<identifier> après le mot clé initial pour les définitions qui ne sont pas des

<referenced definition> (c'est-à-dire qu'un <name> doit être spécifié pour les définitions normales).

Sémantique

Avant d'établir les propriétés d'une définition <system definition>, chaque référence est remplacée par la <referenced definition> correspondante. Dans cette substitution, l'<identifier> de la <referenced definition> est remplacé par le

<name> dans la référence.

Modèle

La relation entre la définition <referenced definition> et la grammaire abstraite est donnée en 7.

2.4.2 Système