• Aucun résultat trouvé

5 Données dans le SDL

5.4 Utilisation de données comportant des variables

5.4.3 Instruction d'affectation

<active expression list> ::=

<active expression> [ , <expression list> ]

| <ground expression> , <active expression list>

Une application <operator application> diffère de l'expression <ground expression> analogue sur le plan syntaxique en ce sens que l'une des <expression> de la liste d'<expression> figurant entre crochets est une expression <active expression>. Si toutes les <expression> entourées de crochets sont des expressions <ground expression>, la construction représente une expression ground expression selon la définition du 5.3.3.2.

Sémantique

Une application d'opérateur est une expression active qui a la valeur du terme clos équivalent de l'application d'opérateur. Le terme clos équivalent est déterminé de la même façon qu'en 5.4.2.1.

La liste d'expressions concernant l'application d'opérateur est interprétée dans l'ordre indiqué avant l'interprétation de l'opérateur.

Si une sorte d'argument de la signature d'opérateur est un syntype et si l'expression correspondante contenue dans la liste d'expressions actives est une expression active, le contrôle de l'intervalle défini en 5.3.1.9.1 est appliqué à la valeur de l'expression. Si le contrôle de l'intervalle est Faux au moment de l'interprétation, le système est alors en erreur et le comportement ultérieur du système n'est pas défini.

Si la sorte de résultat de la signature de l'opérateur est un syntype, il s'ensuit que le contrôle de l'intervalle défini en 5.3.1.9.1 est appliqué à la valeur de l'application d'opérateur. Si le contrôle de l'intervalle est Faux au moment de l'interprétation, le système est alors en erreur et le comportement ultérieur du système n'est pas défini.

5.4.3 Instruction d’affectation

Si la variable est déclarée avec un syntype et si l'expression est une expression active, il s'ensuit que le contrôle de l'intervalle défini en 5.3.1.9.1 est appliqué à l'expression. Si ce contrôle de l'intervalle est équivalent à Faux, l'affectation est alors dans l'erreur et le comportement ultérieur du système n'est pas défini.

5.4.3.1 Variable indexée

Une variable indexée est une notation syntaxique abrégée qui peut être utilisée pour désigner l'«indexation» des

«tableaux». Toutefois, à l'exception de sa forme syntaxique spéciale, un primaire actif indexé n'a pas de propriétés spéciales et désigne un opérateur avec le primaire actif comme paramètre.

Grammaire textuelle concrète

<indexed variable> ::=

<variable> ( <expression list> )

Il faut qu'il existe une définition appropriée d'un opérateur appelé Modify!.

Sémantique

Une variable indexée représente l'affectation d'une valeur formée par l'application de l'opérateur Modify! à un accès de la variable et à l'expression indiquée dans la variable indexée.

Modèle

La forme syntaxique concrète

<variable> ( <expression list> ) := <expression>

est la syntaxe concrète dérivée de

<variable> := Modify!( <variable>,<expression list>,<expression> )

où la même <variable> est répétée et le texte est considéré comme une affectation correcte même si Modify! n'est pas admis, dans la syntaxe concrète, comme nom d'opérateur pour les expressions. La syntaxe abstraite est déterminée, pour cette instruction <assignment statement> conformément au 5.4.3 ci-dessus.

NOTE – Ce modèle a pour conséquence qu'une valeur doit être affectée à un tableau complet, avant de pouvoir modifier un élément.

5.4.3.2 Variable de champ

Une variable de champ est une notation abrégée permettant d'affecter une valeur à une variable de telle manière que la valeur existant dans un champ de cette variable est la seule à être modifiée.

Grammaire textuelle concrète

<field variable> ::=

<variable> <field selection>

Il faut qu'il existe une définition appropriée d'un opérateur appelé Modify! Normalement, cette définition sera déduite d'une définition structurée de la sorte.

Sémantique

Une variable de champ représente l'affectation d'une valeur formée par l'application d'un opérateur de modification de champ.

Modèle

La sélection de champ entre crochets est la syntaxe dérivée de !<field name> sélection de champ conformément à la définition donnée en 5.3.3.5.

La forme syntaxique concrète

<variable> ! <field name> := <expression>

est la syntaxe concrète dérivée de

<variable> := <field modify operator name> ( <variable>, <expression> ) où

a) la même <variable> est répétée; et

b) le nom <field modify operator name> est formé à partir de la concaténation du nom de champ et de

«Modify!»; puis

c) le texte est considéré comme affectation correcte même si le nom <field modify operator name> n'est pas admis, dans la syntaxe concrète, comme nom d'opérateur pour les expressions.

S'il existe plus d'un nom <field name> dans la sélection de champ, ils sont alors représentés de la façon indiquée ci-dessus, chaque !<field name>, étant développé tour à tour de droite à gauche et la partie restante de la variable <field variable> étant considérée comme une <variable>. Par exemple,

var ! fielda ! fieldb := expression;

est représenté tout d'abord par

var ! fielda := fieldbModify!(var ! fielda, expression);

puis par

var := fieldbModify!(var, fieldbModify!(var ! fielda, expression));

La syntaxe abstraite est déterminée pour l'instruction <assignment statement> formée à partir du modèle conformément en 5.4.3 ci-dessus.

NOTE – Ce modèle a pour conséquence qu'une valeur doit être affectée à une structure complète, avant de pouvoir modifier un élément.

5.4.3.3 Initialisation par défaut

Une initialisation par défaut permet l'initialisation de toutes les variables d'une sorte spécifiée avec la même valeur, lorsque les variables sont créées.

Grammaire textuelle concrète

<default initialization> ::=

default <ground expression> [ <end> ]

Une définition <partial type definition> ou une définition <syntype definition> ne doit pas contenir plus d'une initialisation <default initialization>.

Sémantique

Une initialisation par défaut est ajoutée, à titre facultatif, à une expression de propriétés d'une sorte. Une initialisation par défaut spécifie que n'importe quelle variable déclarée avec la sorte introduite par la définition partielle de type ou la définition de syntype prend au départ la valeur de l'expression close associée.

Modèle

L'initialisation par défaut est une abréviation pour spécifier une initialisation explicite pour les variables de la sorte

<sort> déclarées sans expression <ground expression>.

Si la définition <syntype definition> ne donne pas d'initialisation <default initialization>, le syntype a alors l'initialisation <default initialization> de l'identificateur <parent sort identifier> à condition que sa valeur soit dans l'intervalle.

Une variable déclarée à l'intérieur d'un type paramétré dont la sorte est un paramètre de contexte formel ne prend pas l'initialisation par défaut de la sorte.