Manuel de référence de la grammaire de Data Flow Generator V0

De Wikip
Version : 1.36.1 4936 (2026-07-24) 20260724190758

Data Flow Generator (Dfg) est un outil qui a pour but le développement de logiciels en gardant la synchronisation entre les sources (Python et C++) et les modèles utilisant DfgUml(UML) et DfgBehaviour(code Python des méthodes).

Il fait appel aux paradigmes de développement suivants : Round-trip engineering, Object-oriented programming et Model-driven software development.

Dfg offre aussi la possibilité d'écrire ou lire automatiquement la forme persistante des données décrites dans DfgUml.

Il existe deux versions de Dfg : V0 et V1.

Dfg V1 utilise DfgUml et DfgBehaviour et ne génère pour l'instant que du code Python tandis que Dfg V0 n'utilise que DfgUml et génère du code Python et C++.

Dfg V1 peut aussi importer DfgUml depuis les diagrammes de classes contenus dans le fichiers édités par le logiciel Dia.

L'outil est gratuitement utilisable en ligne sur Internet à l'adresse http://dfg.bht.fr pour la version 0 et sur http://dfg1.bht.fr pour la version 1.

Les sources générés par Dfg suivent sous la licence MPL 1.1 et/ou LPGL

Data Flow Generator (Dfg) is a tool that is intended for software development by keeping the synchronization between the sources (PYTHON and C++) and models using DfgUml (UML) and DfgBehaviour (Python codes of methods).

It uses the following paradigms of development: Round-trip engineering, Object-oriented programming and Model-driven software development.

Dfg also offers the ability to automatically read and write the persistent form of data described by DfgUml.

There are two versions of Dfg: V0 and V1.

Dfg V1 uses DfgUml and DfgBehaviour and generates, currently, only Python code while Dfg V0 uses only DfgUml and generates Python and C++ code.

Dfg V1 can also import DfgUml from class diagrams contained in the files edited by the software Dia.

The tool can be used online for free at http://dfg.bht.fr for version 0 and http://dfg1.bht.fr for version 1.

Sources generated by Dfg ar under the license MPL 1.1 and/or LPGL
Dfg1.png
Fig. n°1: Data Flow Generator V1

1 Notation : cardinalité ou multiplicité

§-1

La cardinalité ou multiplicité sert à déterminer le nombre minimum et maximum de possibilités que chaque entité peut avoir au sein d'une autre entité.

Pour décrire les cardinalités nous utiliserons la notation suivante :

Soient n, n1, n2 des entiers

notation dans les doubles quottes description
"n1:n2" de n1 à n2
"?" or "0:1" de 0 à 1, optionnel
"*" or "0:*" de 0 à l'infini
"+" or "1:*" de 1 à l'infini
"n:" or "n:*" de n à l'infini
"n" or "n:n" de n à n, exactement n
si non présent valeur de défaut : exactement 1

T n°1: Cardinalités

2 Format du fichier de description grammaticale

2.1 Le fichier XML

§-2

Le fichier XML doit commencer par :

<?xml version="1.0" encoding="UTF-8"?>


Ce informations sont destinées au pilote XML qui notamment s'en sert pour connaitre le codage (encoding) des caractères utilisé dans le fichier. Nous utiliserons en général l'encodage UTF-8, il faut donc vérifier que votre éditeur est configuré pour éditer avec cet encodage ou l'encodage que vous avez choisi d'utiliser.

2.2 La racine - le tag grammar

§-3

Un document XML doit comporter une nœud racine unique, ce nœud sera nommé grammar.

Le tag de grammar comporte les attributs suivants :

  • type
cardinalité : 1
décrit le type du tag. Les types doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
le type peut renvoyer aussi à une référence de classe (seulement pour les tags el) qui lui suite la syntaxe "@[A-Z_][a-zA-Z0-9]+$", c.a.d. "@" suivi du nom de la classe.
Ici il aura toujours la valeur "XML" qui est le type du document entier.
  • version
cardinalité : 1
est la version du format ou méta-grammaire du fichier, elle concerne la syntaxe et la sémantique de ce fichier XML où interviennent les tags tels que grammar, el, attr. La version actuelle est "1.0.0"
  • fileformatversion
cardinalité : 1
contient la version de la grammaire décrite par le contenu décrit dans le fichier XML. Sa valeur dépend du contenu.
§-4

Voici un exemple qui décrit une grammaire minimale mais qui est incorrecte sur le plan syntaxique, car la structure décrite par la grammaire doit aussi contenir un nœud unique comme racine ; voir le tag el.

<?xml version="1.0" encoding="ISO-8859-1"?>
<grammar type="xml" version="1.0.0" fileformatversion="2.3.1">
</grammar>

§-5

Pour avoir un syntaxe correcte il faut ajouter au moins un nœud comme ci-dessous :

<?xml version="1.0" encoding="ISO-8859-1"?>
<grammar type="xml" version="1.0.0" fileformatversion="1.0.0">
    <el type='CTest' name="test"/>
</grammar>

2.3 Les tags simples

§-6

Les tags simples n'ont aucun attribut mais seulement un contenu délimité par le tag ouvrant et fermant, il sont au nombre de trois :

  • unit
cardinalité : ?
Ce tag définit l'unité du tag parent qui le contient. Il ne possède pas d'attribut. Son contenu délimité par le tag unit ouvrant et fermant.
Exemple :
<unit> kg </unit>
  • shelp
cardinalité : ?
Ce tag définit une documentation minimale du tag parent qui le contient. Il ne possède pas d'attribut. Son contenu délimité par le tag shelp ouvrant et fermant.
Exemple :
<shelp> Ce texte est une documentation minimale </shelp>
  • lhelp
cardinalité : ?
Ce tag définit une documentation plus fournie, complémentaire à celle de shelp, du tag parent qui le contient. Il ne possède pas d'attribut. Son contenu délimité par le tag shelp ouvrant et fermant.
Exemple :
<lhelp> Ce texte est une documentation étoffée </lhelp>
§-7

Exemple d'un tag el contenant unit, shelp, lhelp :

<el type="int" name="nb">
  <unit>poire</unit>
  <shelp>Nombre de poires</shelp>
  <lhelp>Ce combre comptabilise le nombre de poires vendues</lhelp>
</el>

2.4 Les tags typés avec nom

2.4.1 Les attributs communs

§-8

Ces tags, qui sont attr et el possèdent les attributs suivants :

  • type
cardinalité : 1
décrit le type du tag. Les types doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
le type peut renvoyer aussi à une référence de classe (seulement pour les tags el) qui lui suite la syntaxe "@[A-Z_][a-zA-Z0-9]+$", c.a.d. "@" suivi du nom de la classe.
  • name
cardinalité : 1
definit le nom du tag. Les noms doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
Le nom doit être unique dans toute la grammaire.
  • help
cardinalité : ?
A ne pas confondre avec shelp et lhelp qui elles seront transférées dans les pilotes générées. help permet d'écrire une aide utile au concepteur de la grammaire sur le tag concerné. Cet attribut est complémentaire aux commentaires XML qui peuvent être ajoutée dans le fichier XML.
§-9

Exemple :

<el type='CTest' name="test" help="Noeud racine">
    ...
</el>

2.4.1.1 Les attributs communs aux type int / attr_int, float / attr_float, string / attr_string
§-10
  • default_value
cardinalité : ?
C'est la valeur prise à la création de la donnée.
  • admissible_values
cardinalité : ?
Pour certains cas, par exemple pour des tests on peut restreindre les valeurs admissibles à une liste finie de valeurs. Les valeurs admissibles sont séparées par le caractère ":". Cependant pour l'instant la prise en compte de cet attribut n'est pas complètement terminée ; il faut donc éviter de l'utiliser surtout que sa syntaxe est très pauvre.
§-11

Exemple :

<el type="int" name="montant" default_value="100" admissible_values="100:200:300:400" />

2.4.2 Les branches et les feuilles de la grammaire

§-12

Tous les types de ces deux tags se classes en deux catégories :

  • les tags de type "feuille" par analogie avec un arbre.
Ce sont les types dits aussi terminaux qui sont les int/attr_int, float/attr_float et string/attr_string (resp. les entiers, les rééls et les chaines de caractères). En effet on ne peut définir des sous structures pour ces entités. Par contre ces tags peuvent posséder les tags unit, shelp, et lhelp et seulement ceux-ci.
  • les tags de type "branche" par analogie avec un arbre.
Seulement le tag el de type "classe" peut contenir des sous structures.

2.4.3 Le tag attr

§-13

Le tag attr représente des feuilles de l'arbre grammatical. Son attribut type prend les trois valeurs "attr_int", "attr_float" et "attr_string" (resp. les entiers, et réels et les chaines de caractères).

La tag possède également le'attribut suivant, qui est optionnel :

  • opt
cardinalité : ?
Le tag attr ne possédant pas de cardinalité pouvant aller au delà de 1, sa cardinalité se restreint alors à 0 ou 1, ce qui le rend occasionnellement optionnel, d'où l'attribut opt. Si opt est omis alors le tag a une cardinalité de 1, si opt a n'importe quelle valeurs alors la cardinalité tag est 0:1.
§-14

Exemple :

<attr type="attr_string" name="prenom" admissible_values="Paul:Jacques" opt="1"/>

2.4.3.1 Le tag attr de type attr_int
§-15

Ses attributs sont :

  • type
cardinalité : 1
décrit le type du tag. Les types doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
le type peut renvoyer aussi à une référence de classe (seulement pour les tags el) qui lui suite la syntaxe "@[A-Z_][a-zA-Z0-9]+$", c.a.d. "@" suivi du nom de la classe.
Dans ce cas type = "attr_int"
  • name
cardinalité : 1
definit le nom du tag. Les noms doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
Le nom doit être unique dans toute la grammaire.
  • help
cardinalité : ?
A ne pas confondre avec shelp et lhelp qui elles seront transférées dans les pilotes générées. help permet d'écrire une aide utile au concepteur de la grammaire sur le tag concerné. Cet attribut est complémentaire aux commentaires XML qui peuvent être ajoutée dans le fichier XML.
  • default_value
cardinalité : ?
C'est la valeur prise à la création de la donnée.
  • admissible_values
cardinalité : ?
Pour certains cas, par exemple pour des tests on peut restreindre les valeurs admissibles à une liste finie de valeurs. Les valeurs admissibles sont séparées par le caractère ":". Cependant pour l'instant la prise en compte de cet attribut n'est pas complètement terminée ; il faut donc éviter de l'utiliser surtout que sa syntaxe est très pauvre.
  • opt
cardinalité : ?
Le tag attr ne possédant pas de cardinalité pouvant aller au delà de 1, sa cardinalité se restreint alors à 0 ou 1, ce qui le rend occasionnellement optionnel, d'où l'attribut opt. Si opt est omis alors le tag a une cardinalité de 1, si opt a n'importe quelle valeurs alors la cardinalité tag est 0:1.

Peut contenir les tags suivants :

  • unit
cardinalité : ?
Ce tag définit l'unité du tag parent qui le contient. Il ne possède pas d'attribut. Son contenu délimité par le tag unit ouvrant et fermant.
Exemple :
<unit> kg </unit>
  • shelp
cardinalité : ?
Ce tag définit une documentation minimale du tag parent qui le contient. Il ne possède pas d'attribut. Son contenu délimité par le tag shelp ouvrant et fermant.
Exemple :
<shelp> Ce texte est une documentation minimale </shelp>
  • lhelp
cardinalité : ?
Ce tag définit une documentation plus fournie, complémentaire à celle de shelp, du tag parent qui le contient. Il ne possède pas d'attribut. Son contenu délimité par le tag shelp ouvrant et fermant.
Exemple :
<lhelp> Ce texte est une documentation étoffée </lhelp>
§-16

Exemple :

<attr type="attr_int" name="nombre" default_value="0" admissible_values="0:1:2:3:4" opt="oui" help="TODO changer le nom en 'Nb'">
  <unit> chocs </unit> 
  <shelp> Nombre de chocs entre les atomes </shelp>
  <lhelp> Nombre de chocs entre les atomes qui a un rapport direct avec ... </lhelp>
</attr>

2.4.3.2 Le tag attr de type attr_float
§-17

Ses attributs sont :

  • type
cardinalité : 1
décrit le type du tag. Les types doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
le type peut renvoyer aussi à une référence de classe (seulement pour les tags el) qui lui suite la syntaxe "@[A-Z_][a-zA-Z0-9]+$", c.a.d. "@" suivi du nom de la classe.
Dans ce cas type = "attr_float"
  • name
cardinalité : 1
definit le nom du tag. Les noms doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
Le nom doit être unique dans toute la grammaire.
  • help
cardinalité : ?
A ne pas confondre avec shelp et lhelp qui elles seront transférées dans les pilotes générées. help permet d'écrire une aide utile au concepteur de la grammaire sur le tag concerné. Cet attribut est complémentaire aux commentaires XML qui peuvent être ajoutée dans le fichier XML.
  • default_value
cardinalité : ?
C'est la valeur prise à la création de la donnée.
  • admissible_values
cardinalité : ?
Pour certains cas, par exemple pour des tests on peut restreindre les valeurs admissibles à une liste finie de valeurs. Les valeurs admissibles sont séparées par le caractère ":". Cependant pour l'instant la prise en compte de cet attribut n'est pas complètement terminée ; il faut donc éviter de l'utiliser surtout que sa syntaxe est très pauvre.
  • opt
cardinalité : ?
Le tag attr ne possédant pas de cardinalité pouvant aller au delà de 1, sa cardinalité se restreint alors à 0 ou 1, ce qui le rend occasionnellement optionnel, d'où l'attribut opt. Si opt est omis alors le tag a une cardinalité de 1, si opt a n'importe quelle valeurs alors la cardinalité tag est 0:1.

Peut contenir les tags suivants :

  • unit
cardinalité : ?
Ce tag définit l'unité du tag parent qui le contient. Il ne possède pas d'attribut. Son contenu délimité par le tag unit ouvrant et fermant.
Exemple :
<unit> kg </unit>
  • shelp
cardinalité : ?
Ce tag définit une documentation minimale du tag parent qui le contient. Il ne possède pas d'attribut. Son contenu délimité par le tag shelp ouvrant et fermant.
Exemple :
<shelp> Ce texte est une documentation minimale </shelp>
  • lhelp
cardinalité : ?
Ce tag définit une documentation plus fournie, complémentaire à celle de shelp, du tag parent qui le contient. Il ne possède pas d'attribut. Son contenu délimité par le tag shelp ouvrant et fermant.
Exemple :
<lhelp> Ce texte est une documentation étoffée </lhelp>
§-18

Exemple :

<attr type="attr_float" name="energie" default_value="0.0" admissible_values="0.0:1.4:2.3" opt="oui" help="Obsolète">
  <unit> Joules </unit> 
  <shelp> Energie fournie </shelp>
  <lhelp> Energie fournie pour provoquer la réaction ... </lhelp>
</attr>

2.4.3.3 Le tag attr de type attr_string
§-19

Ses attributs sont :

  • type
cardinalité : 1
décrit le type du tag. Les types doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
le type peut renvoyer aussi à une référence de classe (seulement pour les tags el) qui lui suite la syntaxe "@[A-Z_][a-zA-Z0-9]+$", c.a.d. "@" suivi du nom de la classe.
Dans ce cas type = "attr_string"
  • name
cardinalité : 1
definit le nom du tag. Les noms doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
Le nom doit être unique dans toute la grammaire.
  • help
cardinalité : ?
A ne pas confondre avec shelp et lhelp qui elles seront transférées dans les pilotes générées. help permet d'écrire une aide utile au concepteur de la grammaire sur le tag concerné. Cet attribut est complémentaire aux commentaires XML qui peuvent être ajoutée dans le fichier XML.
  • default_value
cardinalité : ?
C'est la valeur prise à la création de la donnée.
  • admissible_values
cardinalité : ?
Pour certains cas, par exemple pour des tests on peut restreindre les valeurs admissibles à une liste finie de valeurs. Les valeurs admissibles sont séparées par le caractère ":". Cependant pour l'instant la prise en compte de cet attribut n'est pas complètement terminée ; il faut donc éviter de l'utiliser surtout que sa syntaxe est très pauvre.
  • opt
cardinalité : ?
Le tag attr ne possédant pas de cardinalité pouvant aller au delà de 1, sa cardinalité se restreint alors à 0 ou 1, ce qui le rend occasionnellement optionnel, d'où l'attribut opt. Si opt est omis alors le tag a une cardinalité de 1, si opt a n'importe quelle valeurs alors la cardinalité tag est 0:1.

Peut contenir les tags suivants :

  • shelp
cardinalité : ?
Ce tag définit une documentation minimale du tag parent qui le contient. Il ne possède pas d'attribut. Son contenu délimité par le tag shelp ouvrant et fermant.
Exemple :
<shelp> Ce texte est une documentation minimale </shelp>
  • lhelp
cardinalité : ?
Ce tag définit une documentation plus fournie, complémentaire à celle de shelp, du tag parent qui le contient. Il ne possède pas d'attribut. Son contenu délimité par le tag shelp ouvrant et fermant.
Exemple :
<lhelp> Ce texte est une documentation étoffée </lhelp>
§-20

Exemple :

<attr type="attr_string" name="prenom" default_value="Paul" admissible_values="Paul:Jacques:Marie" opt="oui" help="TODO Compléter les valeurs admissibles">
  <shelp> Prénom par défaut </shelp>
  <lhelp> Prénom par défaut proposé dans la liste déroulante ... </lhelp>
</attr>

2.4.4 Le tag el

§-21

Le tag el permet de donner une structure arborescente à la grammaire. Ainsi en plus des tags tels que attr, il peut contenir de façon récurrente d'autres tags el.

  • cardinality
cardinalité : ?
décrit la cardinalité du tag par rapport au tag parent. Puisque cet attribut est optionnelle s'il est omis alors la cardinalité est 1 par defaut. La syntaxe utilisé est définie dans le § «Notation : cardinalité ou multiplicité»

La particularité du tag el est qu'il peut avoir une cardinalité supérieur à 1. Cela n'empêche pas que les types int, float et string soient des feuilles de l'arbre grammatical.

2.4.4.1 Les feuilles de l'arbre grammatical du tag el
2.4.4.1.1 Le tag el de type int
§-22

Ses attributs sont :

  • type
cardinalité : 1
décrit le type du tag. Les types doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
le type peut renvoyer aussi à une référence de classe (seulement pour les tags el) qui lui suite la syntaxe "@[A-Z_][a-zA-Z0-9]+$", c.a.d. "@" suivi du nom de la classe.
Dans ce cas type = "int"
  • name
cardinalité : 1
definit le nom du tag. Les noms doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
Le nom doit être unique dans toute la grammaire.
  • help
cardinalité : ?
A ne pas confondre avec shelp et lhelp qui elles seront transférées dans les pilotes générées. help permet d'écrire une aide utile au concepteur de la grammaire sur le tag concerné. Cet attribut est complémentaire aux commentaires XML qui peuvent être ajoutée dans le fichier XML.
  • default_value
cardinalité : ?
C'est la valeur prise à la création de la donnée.
  • admissible_values
cardinalité : ?
Pour certains cas, par exemple pour des tests on peut restreindre les valeurs admissibles à une liste finie de valeurs. Les valeurs admissibles sont séparées par le caractère ":". Cependant pour l'instant la prise en compte de cet attribut n'est pas complètement terminée ; il faut donc éviter de l'utiliser surtout que sa syntaxe est très pauvre.
  • cardinality
cardinalité : ?
décrit la cardinalité du tag par rapport au tag parent. Puisque cet attribut est optionnelle s'il est omis alors la cardinalité est 1 par defaut. La syntaxe utilisé est définie dans le § «Notation : cardinalité ou multiplicité»

Peut contenir les tags suivants :

  • unit
cardinalité : ?
Ce tag définit l'unité du tag parent qui le contient. Il ne possède pas d'attribut. Son contenu délimité par le tag unit ouvrant et fermant.
Exemple :
<unit> kg </unit>
  • shelp
cardinalité : ?
Ce tag définit une documentation minimale du tag parent qui le contient. Il ne possède pas d'attribut. Son contenu délimité par le tag shelp ouvrant et fermant.
Exemple :
<shelp> Ce texte est une documentation minimale </shelp>
  • lhelp
cardinalité : ?
Ce tag définit une documentation plus fournie, complémentaire à celle de shelp, du tag parent qui le contient. Il ne possède pas d'attribut. Son contenu délimité par le tag shelp ouvrant et fermant.
Exemple :
<lhelp> Ce texte est une documentation étoffée </lhelp>
§-23

Exemple :

<el type="int" name="nombre" cardinality="+" default_value="0" admissible_values="0:1:2:3:4" opt="oui" help="TODO changer le nom en 'Nb'">
  <unit> chocs </unit> 
  <shelp> Nombre de chocs entre les atomes </shelp>
  <lhelp> Nombre de chocs entre les atomes qui a un rapport direct avec ... </lhelp>
</el>

2.4.4.1.2 Le tag el de type float
§-24
  • type
cardinalité : 1
décrit le type du tag. Les types doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
le type peut renvoyer aussi à une référence de classe (seulement pour les tags el) qui lui suite la syntaxe "@[A-Z_][a-zA-Z0-9]+$", c.a.d. "@" suivi du nom de la classe.
Dans ce cas type = "float"
  • name
cardinalité : 1
definit le nom du tag. Les noms doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
Le nom doit être unique dans toute la grammaire.
  • help
cardinalité : ?
A ne pas confondre avec shelp et lhelp qui elles seront transférées dans les pilotes générées. help permet d'écrire une aide utile au concepteur de la grammaire sur le tag concerné. Cet attribut est complémentaire aux commentaires XML qui peuvent être ajoutée dans le fichier XML.
  • default_value
cardinalité : ?
C'est la valeur prise à la création de la donnée.
  • admissible_values
cardinalité : ?
Pour certains cas, par exemple pour des tests on peut restreindre les valeurs admissibles à une liste finie de valeurs. Les valeurs admissibles sont séparées par le caractère ":". Cependant pour l'instant la prise en compte de cet attribut n'est pas complètement terminée ; il faut donc éviter de l'utiliser surtout que sa syntaxe est très pauvre.
  • cardinality
cardinalité : ?
décrit la cardinalité du tag par rapport au tag parent. Puisque cet attribut est optionnelle s'il est omis alors la cardinalité est 1 par defaut. La syntaxe utilisé est définie dans le § «Notation : cardinalité ou multiplicité»
§-25

Exemple :

<el type="float" name="energie" cardinality="*" default_value="0.0" admissible_values="0.0:1.4:2.3" opt="oui" help="Obsolète"/>

2.4.4.1.3 Le tag el de type string
§-26
  • type
cardinalité : 1
décrit le type du tag. Les types doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
le type peut renvoyer aussi à une référence de classe (seulement pour les tags el) qui lui suite la syntaxe "@[A-Z_][a-zA-Z0-9]+$", c.a.d. "@" suivi du nom de la classe.
Dans ce cas type = "string"
  • name
cardinalité : 1
definit le nom du tag. Les noms doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
Le nom doit être unique dans toute la grammaire.
  • help
cardinalité : ?
A ne pas confondre avec shelp et lhelp qui elles seront transférées dans les pilotes générées. help permet d'écrire une aide utile au concepteur de la grammaire sur le tag concerné. Cet attribut est complémentaire aux commentaires XML qui peuvent être ajoutée dans le fichier XML.
  • default_value
cardinalité : ?
C'est la valeur prise à la création de la donnée.
  • admissible_values
cardinalité : ?
Pour certains cas, par exemple pour des tests on peut restreindre les valeurs admissibles à une liste finie de valeurs. Les valeurs admissibles sont séparées par le caractère ":". Cependant pour l'instant la prise en compte de cet attribut n'est pas complètement terminée ; il faut donc éviter de l'utiliser surtout que sa syntaxe est très pauvre.
  • cardinality
cardinalité : ?
décrit la cardinalité du tag par rapport au tag parent. Puisque cet attribut est optionnelle s'il est omis alors la cardinalité est 1 par defaut. La syntaxe utilisé est définie dans le § «Notation : cardinalité ou multiplicité»
§-27

Exemple :

<el type="string" name="prenom" cardinality="?" default_value="Paul" admissible_values="Paul:Jacques:Marie" opt="oui" help="TODO Compléter les valeurs admissibles"/>

2.4.4.2 Les branches de l'arbre grammatical du tag el : les classes
2.4.4.2.1 Introduction
§-28

Les branches de l'arbre grammatical ne sont rien d'autre que des tags el dans d'autres tags el.

Bien sûr les tags el de type int, float et string ne peuvent contenir d'autres tags el, car ce sont des feuilles de l'arbre.

En fait les autres types sont définis par la grammaire même. En effet les types int, float et string sont des types dits «primitif»; leur sémantique est à priori connu. Le nom des autres types doit être défini par la grammaire, c.a.d. par celui qui rédige la grammaire.

§-29

Voici un exemple où le nouveau type TypePoint a été défini à partir du type primitif float :

<el name="Point" type="TypePoint">
  <el name="x" type="float">
  <el name="y" type="float">
</el>

§-30

Voici un autre exemple où le nouveau type TypeCercle a été défini à partir du type primitif float et un type définit par la grammaire, nommé TypePoint:

<el name="Point" type="TypeCercle">
  <el name="Rayon" type="float">
  <el name="Point" type="TypePoint">
    <el name="x" type="float">
    <el name="y" type="float">
  </el>
</el>

§-31

Les tags el de type défini par la grammaire seront appelé des classes. Mais la notion de classe enferme d'autres caractéristiques que nous allons développer dans la suite.

2.4.4.2.2 Les attributs classiques
§-32
  • name
cardinalité : 1
definit le nom du tag. Les noms doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
Le nom doit être unique dans toute la grammaire.
  • help
cardinalité : ?
A ne pas confondre avec shelp et lhelp qui elles seront transférées dans les pilotes générées. help permet d'écrire une aide utile au concepteur de la grammaire sur le tag concerné. Cet attribut est complémentaire aux commentaires XML qui peuvent être ajoutée dans le fichier XML.
  • cardinality
cardinalité : ?
décrit la cardinalité du tag par rapport au tag parent. Puisque cet attribut est optionnelle s'il est omis alors la cardinalité est 1 par defaut. La syntaxe utilisé est définie dans le § «Notation : cardinalité ou multiplicité»
2.4.4.2.3 Les types classe et les références des classe
§-33

Les noms des classes sont définit par l'attribut type:

  • type
cardinalité : 1
décrit le type du tag. Les types doivent suivre la syntaxe "[a-z_][a-zA-Z0-9_]*$" qui est écrite dans la langage des expressions régulière de la librairie re du langage PYTHON.
le type peut renvoyer aussi à une référence de classe (seulement pour les tags el) qui lui suite la syntaxe "@[A-Z_][a-zA-Z0-9]+$", c.a.d. "@" suivi du nom de la classe.
Le nom des autres types doit être défini par la grammaire, c.a.d. par celui qui rédige la grammaire. Voici quelques exemples de noms de type de classe : CHead, CHist, CBody

Les références de classes évitent de redéfinir des noms de classes et de dupliquer la structure d'une classe existante.

Exemple d'utilisation de référence de classe :

<el name="vecteur" type="CVecteur">
  <el name="x" type="float"/>
  <el name="y" type="float"/>
</el>

<el name="vitesse" type="@CVecteur" />

En l'utilisation des types primitifs revient à utiliser des références mais sans le caractère "@". Dans ce cas pourquoi utiliser ce caractère pour les autres types ? C'est parce que nous n'aurions aucun moyen de distinguer une classe vide d'une référence de classe. L'exemple suivant :

<el name="vecteur" type="CVecteur"/>
<el name="vitesse" type="@CVecteur" />

donnerait :

<el name="vecteur" type="CVecteur"/>
<el name="vitesse" type="CVecteur"/>

Nous pourrions aussi dire que toute classe vide est une référence de classe, mais ceci n'a pas été retenu comme solution.

Rq Dans un langage de programmation cette question ne se pose pas, car on sépare en général la définition d'une classe des instanciations de celle-ci. Dans notre grammaire la première définition est une instaciation sauf si l'attribut OnlyDefinition est positionné.

Les références permettent aussi définir récursivement. Voici un exemple :

<el name="recurence" type="CRecurence">
  <el name="sub1" type='@CRecurence' cardinality="?"/>
  <el name="subn" type='@CRecurence' cardinality="*"/>
</el>
Al1
Attention16.png

Attention, ne faites pas l'erreur suivante :

<el name="recurence" type="CRecurence">
  <el name="sub1" type='@CRecurence'/>
</el>
Car, une fois le code du driver généré, quand le code sera exécuté, si la compilation est acceptée, il y aura une erreur de récursion infinie.
2.4.4.2.4 Les classes OnlyDefinition
§-34
  • OnlyDefinition
cardinalité : ?
Si l'attribut OnlyDefinition est présent alors la classe ne sera pas utilisé à l'endroit où elle est définie dans la structure grammaticale.
Par exemple les classes OnlyDefinition peuvent servir comme classe de base à ses classes dérivées sans pour autant exister dans les instances.
Exemple de classe OnlyDefinition :

Manuel de référence de la grammaire de Data Flow Generator V0

<el name="LeCamion" type="CCamion">
  <el name="UneRoue" type="CRoue" OnlyDefinition="1">
     <el name="rayon" type="float">
  </el>
  <el name="rouesAvant" type="CRoueAvecEcart" heritances="CRoue" cardinality="2">
     <el name="ecart" type="float"/>
  </el>
  <el name="rouesArrieres" type="@CRoueAvecEcart" cardinality="4"/>
  <el name="roueDeSecour" type="@CRoue" cardinality="?"/>
</el>



La classe CRoue est la classe qui ne donnera pas à une instance de cette classe dans sa position de définition, elle sert surtout d'ancêtre à la classe CRoueAvecEcart.
Al2
Attention16.png
On peut remarquer que la classe CRoue aura quand même l'instance "roueDeSecour" avec l'utilisation des références de classe; il faut donc avoir à l'esprit que l'attribut OnlyDefinition ne s'applique qu'à la balise ou tag qui la contient.
2.4.4.2.5 L'héritage de classes : heritances
§-35
  • heritances
cardinalité : ?
liste les types des classes ancêtres. Avec cet attribut renseigné la classe hérite des propriétés du ou des classes ancêtres.
Voici un exemple :

<el name="vecteur" type="CVecteur">
  <el name="x" type="float"/>
  <el name="y" type="float"/>
</el>

<el name="objet" type="CObjetGraphique">
  <el name="nom" type="string"/>
</el>

<el name="point" type="CPoint" heritances="CVecteur:CObjetGraphique"/>

<el name="droite" type="CDroite" heritances="CPoint">
  <el name="direction" type="@CVecteur"/>
</el>


Dans cette exemple la classe CDroite hérite de CPoint qui lui hérite de CVecteur et CObjetGraphique et donc la classe CDroite aura les attributs x,y,nom et direction.
2.4.4.2.6 Le polymorphisme des classes : accept
§-36
  • accept
cardinalité : ?
L'attribut accept permet d'activer le polymorphisme des classes et en plus il permet de contrôler les classes dérivées acceptables. Cet attribut contient la liste des classes dérivées qui doivent être acceptées par le driver. Les noms des classes sont séparés par le caractère ":".
Exemple :

<el name="A" type="ClassA" accept="ClassB:ClassC" cardinality="*"> ... </el>

<el name="B" type="ClassB" heritances="ClassA" OnlyDefinition="1"> ... </el>

<el name="C" type="ClassC" heritances="ClassB" OnlyDefinition="1"> ... </el>

2.4.4.2.7 Exemples de classes
§-37

Voici un exemple qui fait appel à une définition récurrente utilisation les attributs OnlyDefinition, heritances, accept.

<el OnlyDefinition="1"  name="OnlyDefinition_geometry" type="CBasegeometry"  >
    <el name="shape" type="int" />
    <el name="data" type="float"  cardinality="*" />
</el>
<el  name="geometry" type="Cgeometry"  heritances="CBasegeometry" >
    <el  name="geometry" type="@CBasegeometry" cardinality="*"  accept="CBasegeometry:Cgeometry"/>
</el>

§-38

Avec cette grammaire on peut construire des données ayant l'allure suivante :

geometry
  geometry
     geometry
        shape
        data
        ...
        data
        geometry  
           shape
           data
           ...
           data
  geometry
     shape
     data
     ...
     data
  ...

2.5 Liste des tags

§-39
  • unit
  • shelp
  • lhelp
  • les tags types avec nom et cardinalité
  • attr
les types du tag attr
  • attr_int
  • attr_float
  • attr_string
  • el
les types du tag el
  • int
  • float
  • string
  • classe quelconque
  • référence de classe quelconque

3 Voir aussi

4 Liens