• Aucun résultat trouvé

6 Concepts de définition de type dans le SDL

6.2 Paramètre de contexte

Afin d'utiliser une définition de type dans différents contextes, à la fois à l'intérieur de la spécification d'un même système et des spécifications de systèmes différents, les types peuvent être paramétrés par des paramètres de contexte.

Ces derniers sont remplacés par des identificateurs réels, les paramètres de contexte réels, conformément en 6.1.2.

Les définitions de types suivantes peuvent avoir des paramètres de contexte formels: type de système, type de bloc, type de processus, type de service, procédure, signal et sorte.

On peut fixer des contraintes pour les paramètres de contexte, c'est-à-dire des entités et des propriétés requises désignées par l'identificateur réel correspondant. Les paramètres de contexte à l'intérieur du type possèderont ces propriétés.

Grammaire textuelle concrète

<formal context parameters>::=

<context parameters start> <formal context parameter>

{<end> <formal context parameter> }* <context parameters end>

<actual context parameters>::=

<context parameters start>

[<actual context parameter>] {, [<actual context parameter> ] }* <context parameters end>

<actual context parameter> ::=

<identifier>

<context parameters start> ::=

<

<context parameters end> ::=

>

<formal context parameter>::=

<process context parameter>

| <procedure context parameter>

| <remote procedure context parameter>

| <signal context parameter>

| <variable context parameter>

| <remote variable context parameter>

| <timer context parameter>

| <synonym context parameter>

| <sort context parameter>

NOTE – Les caractères «<» et «>» délimitent les paramètres de contexte et ne sont pas uniquement utilisés ci-dessus en tant que métasymboles.

L'unité de portée d'une définition de type avec des paramètres de contexte formels définit les noms des paramètres de contexte formels. Ces noms sont alors visibles dans la définition du type et aussi dans la définition des paramètres de contexte formels.

Les paramètres de contexte formels ne peuvent être utilisés ni comme type <base type> dans l'expression <type expression> ni dans des contraintes atleast des paramètres <formal context parameters>.

Les contraintes sont spécifiées par des spécifications de contraintes. Une spécification de contrainte introduit l'entité du paramètre de contexte formel suivie soit par une signature de contrainte soit par une clause atleast. Une signature de contrainte introduit les propriétés directement suffisantes du paramètre de contexte formel. Une clause atleast indique que le paramètre de contexte formel doit être remplacé par un paramètre de contexte réel qui est du même type ou sous-type que le sous-type identifié par la clause atleast. Les identificateurs suivants le mot clé atleast dans cette clause doivent identifier des définitions de type du genre d'entité du paramètre de contexte et ne doivent être ni des paramètres de contexte formels ni des types paramétrés.

Un paramètre de contexte formel d'un type donné doit être limité seulement à un paramètre de contexte réel du même genre d'entité qui satisfait aux contraintes du paramètre formel.

Le type paramétré peut seulement utiliser les propriétés d'un paramètre de contexte données par la contrainte, à l'exception des cas énumérés en 6.1.2.

Un paramètre de contexte utilisant d'autres paramètres de contexte dans sa contrainte ne peut pas être limité avant les autres paramètres.

La liaison d'un paramètre de contexte synonyme ou variable réel avec sa définition n'est pas résolue par le contexte.

Les virgules de poursuite peuvent être omises dans les paramètres <actual context parameters>.

Sémantique

Les paramètres de contexte formels d'une définition de type qui n'est ni une définition de sous-type ni définie par liaison des paramètres de contexte formels dans une expression <type expression> sont les paramètres spécifiés dans les paramètres <formal context parameters>.

Les paramètres de contexte d'un type sont limités dans la définition d'une expression <type expression> ou d'une règle

<inheritance rule> aux paramètres de contexte réels. Dans la liaison, les occurrences des paramètres de contexte formels à l'intérieur du type paramétré sont remplacées par les paramètres réels. Pendant la liaison des identificateurs contenus dans les paramètres <formal context parameter> aux définitions (c'est-à-dire la dérivation de leurs qualificateurs, voir 2.2.2), les autres définitions locales différentes des paramètres <formal context parameters> sont ignorées.

Les types paramétrés ne peuvent pas être des paramètres de contexte réels. Afin de permettre qu'une définition soit un paramètre de contexte réel, elle doit être du même genre d'entité que le paramètre formel et satisfaire à la contrainte du paramètre formel.

Modèle

Si une unité de portée contient <specialization>, tout paramètre de contexte formel omis dans la spécialisation est remplacé par le paramètre correspondant <formal context parameter> du type <base type> dans l'expression <type expression> et ce paramètre <formal context parameter> devient un paramètre de contexte formel de l'unité de portée.

6.2.1 Paramètre de contexte de processus Grammaire textuelle concrète

<process context parameter>::=

process <process name> <process constraint>

<process constraint>::=

[atleast] <process identifier> | <process signature>

<process signature> ::=

[[ <end> ] <formal parameters signature> ]

<formal parameters signature>::=

fpar <sort>{, <sort> }*

Sémantique

Un paramètre de processus réel doit identifier une définition de processus. Son type doit être un sous-type du type de processus de contrainte (atleast <process identifier>) sans adjonction de paramètres formels aux paramètres du type de contrainte, ou il doit être le type désigné par l'identificateur <process identifier> ou il doit être compatible avec la signature de processus formel. Une définition de processus est compatible avec la signature de processus formel si les paramètres formels de la définition du processus ont les mêmes sortes que les sortes <sort> correspondantes de la signature <formal parameters signature>.

6.2.2 Paramètre de contexte de procédure Grammaire textuelle concrète

<procedure context parameter>::=

procedure <procedure name> <procedure constraint>

<procedure constraint>::=

atleast <procedure identifier>

| <procedure signature>

<procedure signature>::=

[[ <end> ] fpar <procedure formal parameter constraint>

{, <procedure formal parameter constraint> }*

[ <end> returns <sort> ]]

| [ <end> ] returns <sort>

<procedure formal parameter constraint> ::=

<parameter kind> <sort>

Sémantique

Un paramètre de procédure réel doit identifier une définition de procédure qui est soit une spécialisation de la procédure de la contrainte (atleast <procedure identifier>) ou compatible avec la signature de procédure formelle. Une définition est compatible avec la signature de procédure formelle.

a) si les paramètres formels de la définition de la procédure ont les mêmes sortes que les paramètres correspondants de la signature, s'ils ont le même genre <parameter kind> et s'ils renvoient tous une valeur de la même sorte <sort> ou ne renvoient aucune valeur; ou

b) si cette règle est satisfaite après substitution d'une spécification de résultat dans un paramètre in/out supplémentaire; et

c) si chaque paramètre in/out de la définition de procédure a le même identificateur <sort identifier> ou

<syntype identifier> que le paramètre correspondant de la signature.

6.2.3 Paramètre de contexte de procédure distante Grammaire textuelle concrète

<remote procedure context parameter>::=

remote procedure <procedure name> <procedure signature>

Sémantique

Un paramètre réel correspondant à un paramètre de contexte de procédure remote doit identifier une définition <remote procedure definition> ayant la même signature.

6.2.4 Paramètre de contexte de signal Grammaire textuelle concrète

<signal context parameter>::=

signal <signal name> <signal constraint>

{, <signal name> <signal constraint> }*

<signal constraint>::=

atleast <signal identifier>

| <signal signature>

<signal signature>::=

[<sort list>]

[<signal refinement>]

Sémantique

Un paramètre de signal réel doit identifier une définition de signal qui est soit un sous-type du type de signal de la contrainte (atleast <signal identifier>) ou compatible avec la signature de signal formel.

Une définition est compatible avec la signature de signal formel si les sortes du signal sont les mêmes que les sortes de la liste de contraintes de sorte et si, dans le cas où l'affinage <signal refinement> du paramètre <signal context parameter>

est énoncé, les définitions du signal de l'affinage <signal refinement> sont compatibles avec l'affinage <signal refinement> du paramètre <signal context parameter>.

Deux affinages <signal refinement> sont compatibles s'ils définissent le même ensemble de noms de signaux et si chaque définition <subsignal definition> correspondante a le même attribut <reverse>.

6.2.5 Paramètre de contexte de variable Grammaire textuelle concrète

<variable context parameter>::=

dcl <variable name> {,<variable name>}* <sort>

{, <variable name> {,<variable name>}* <sort> }*

Sémantique

Un paramètre réel doit être une variable ou un paramètre de procédure ou de processus formel de la même sorte que la sorte de la contrainte.

6.2.6 Paramètre de contexte de variable distante Grammaire textuelle concrète

<remote variable context parameter>::=

remote <remote variable name> {,<remote variable name>}* <sort>

{, <remote variable name> {,<remote variable name>}* <sort> }*

Sémantique

Un paramètre réel doit identifier une définition <remote variable definition> de la même sorte.

6.2.7 Paramètre de contexte de temporisateur Grammaire textuelle concrète

<timer context parameter>::=

timer <timer name> <timer constraint>

{, <timer name> <timer constraint> }*

<timer constraint> ::=

[<sort list>]

Sémantique

Un paramètre réel de temporisateur doit identifier une définition de temporisateur compatible avec la liste de contraintes de sorte formelle. Une définition de temporisateur est compatible avec la liste de contraintes de sorte formelle si les sortes du temporisateur sont les mêmes sortes de la liste de contraintes de sorte.

6.2.8 Paramètre de contexte de synonyme Grammaire textuelle concrète

<synonym context parameter>::=

synonym <synonym name> <synonym constraint>

{, <synonym name> <synonym constraint> }*

<synonym constraint> ::=

<sort>

Sémantique

Un synonyme réel doit être de la même sorte que la sorte de la contrainte.

6.2.9 Paramètre de contexte de sorte Grammaire textuelle concrète

<sort context parameter>::=

newtype <sort name> [ <sort constraint>]

<sort constraint> ::=

atleast <sort>

| <sort signature>

<sort signature>::=

<operators> endnewtype [<sort name>]

Sémantique

Si la contrainte <sort constraint> est omise, la sorte réelle peut être n'importe quelle sorte. Autrement, une sorte réelle doit être soit un sous-type sans <literal renaming> ou une liste <inheritance list> de la sorte de la contrainte (atleast

<sort>), ou compatible avec la signature de sorte formelle. Une sorte est compatible avec la signature de sorte formelle si les littéraux de la sorte comprennent les littéraux de la signature de sorte formelle et les opérateurs de la sorte comprennent les opérateurs dans la signature de sorte formelle et les opérateurs ont la même signature.

Une signature <sort signature> contient implicitement les opérateurs égal et différent (voir 5.3.1.4). noequality n'est pas autorisé dans la signature <sort signature>.

ordering dans la signature <sort signature> donne la signature pour les opérateurs d'ordre comme définis au § 5.3.1.8.