Changes between Version 6 and Version 7 of CaoCourseTme4


Ignore:
Timestamp:
Feb 25, 2007, 8:27:31 PM (18 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • CaoCourseTme4

    v6 v7  
    1717utiliser les fichiers vst.l et vst.y fournis avec ce TME.
    1818
    19  '''Attention''' : ces fichiers contiennent
    20 délibérement quelques erreurs que vous devrez corriger, afin de vous obliger à les comprendre.
     19'''Attention''' : ces fichiers contiennent délibérement quelques erreurs, que vous devrez corriger,
     20afin de vous obliger à les comprendre.
    2121
    2222= Etape 1 : Communication entre le scaner et le parser =
     
    8080dans le fichier vst.y, de façon à afficher la totalité du fichier exemple.vst,
    8181sous une forme qui respecte la syntaxe du format .vst.
    82 Il faut donc traiter les constructions grammaticales
     82Il faut donc traiter toutes les constructions grammaticales
    8383correspondant à la partie "architecture" du fichier.
    8484
    85  1. On commencera par introduire dans la règle "architecture"
    86     les actions de compilations permettant d'afficher le début et la fin de la section
    87     "architecture".
    88  1. Introduire dans les règles "component" et "signal"
    89     les actions de compilation permettant d'afficher les components et les signaux.
    90  1. Introduire dans les règles "instances", "links" et "link" les actions de
    91     compilation permettant d'afficher les instances. On pourra pour cela définir dans
    92     le fichier .vst un objet de type {{{link_t}}}, permettant de représenter un ensemble
    93     de links sous forme d'une liste chaînée. On pourra s'inspirer de ce qui a été
    94     fait dans la première étape pour l'objet {{{port_t}}}.
    95  1. Vérifier que le fichier texte généré par votre parser respecte la syntaxe
    96     du format .vst, en utilisant le parser pour analyser le fichier qu'il a généré.
     85 * On commencera par introduire dans la règle "architecture" les actions de compilations permettant d'afficher le début et la fin de la section "architecture".
     86 * Introduire dans les règles "component" et "signal" les actions de compilation permettant d'afficher les components et les signaux.
     87 * Introduire dans les règles "instances", "links" et "link" les actions de compilation permettant d'afficher les instances. On pourra pour cela définir dans le fichier ".vst" un objet de type {{{link_t}}}, permettant de représenter un ensemble de links sous forme d'une liste chaînée. On pourra s'inspirer de ce qui a été fait dans la première étape pour l'objet {{{port_t}}}.
     88 * Vérifier que le fichier texte généré par votre parser respecte la syntaxe du format ".vst", en utilisant le parser pour analyser le fichier qu'il a généré.
    9789
     90= Etape 3 : Construction de la structure ''lofig'' =
    9891
    99 = Etape 3 : Construction de la structure lofig =
    100 
    101 La construction de la structure mémoire lofig fait appel à des fonctions spéficiques.
    102 \emph{Une page de manuel} existe pour chacun des objets de cette structure et chacune
     92La construction de la structure de données ''lofig'' fait appel à des fonctions spéficiques.
     93Une page de manuel existe pour chacun des objets de cette structure et chacune
    10394de ces fonctions.  Nous vous invitons à les consulter.
    10495
     
    10899 *  {{{loins}}} pour représenter les \emph{instances};
    109100 *  {{{locon}}} pour représenter les \emph{port}s;
    110  *  {{{chain}}} est une structure utilitaire qui contient deux pointeurs.
    111 \end{itemize}
     101 *  {{{chain}}} permet de construire des listes chaînées.
    112102
    113 La structure chain permet en particulier de construire des ensembles d'objets
    114 de même type sous forme de listes chaînées (ensembles de signaux possédant
    115 une caractéristique commune par exemple).
     103La structure ''chain'' (parfois appelée ''bip'', comme ''bipointeur'') contient deux pointeurs, et
     104permet de construire des ensembles d'objets de même type, sous forme de listes chaînées.
     105{{{
     106 typedef struct chain {
     107                 struct chain     *NEXT;
     108                 void             *DATA;
     109              } chain_list;
     110
     111}}}
    116112
    117113Les différentes fonctions dont vous aurez besoin sont:
    118 \begin{itemize}\itemsep=-.4ex
    119 \item {{{mbkenv}}} pour initialiser le fonctionnement des bibliothèques d'\textbf{Alliance}
    120 (cette fonction ne prend aucun paramètre et ne rend rien mais elle intialise un certain
    121 nombre de variables globales et elle lit l'environnement unix concernant Alliance.
    122 Elle doit etre invoquée au début de la fonction main().
    123 \item {{{addlofig}}} pour créer l'\emph{entity} et les \emph{component}s;
    124 \item {{{getlofig}}} qui renvoie un pointeur vers une figure désignée par son nom;
    125 \item {{{addlocon}}} pour créer les \emph{port}s, aussi bien dans les figures que dans les instances;
    126 \item {{{addlosig}}} pour créer les \emph{signal}s;
    127 \item {{{addloins}}} pour créer les \emph{instance}s;
    128 \item {{{addchain}}} pour créer les bipointeurs;
    129 \item {{{reverse}}} pour «~retourner~» l'ordre des éléments dans une liste de type chain;
    130 \item {{{freechain+ pour libérer une liste créée par \verb+\addchain}}};
    131 \item {{{namealloc}}} pour insérer tous les noms (chaînes de caractères) dans un dictionnaire.
    132 Grâce à cette fonction, $n$ pointeurs représentant $n$ chaînes de caractères identiques pointent
    133 sur une unique zone de mémoire, permettant de tester l'égalité des pointeurs (par {{{==}}})
    134 en lieu et place de l'égalité de chaque caractère (par {{{strcmp}}}).
     114 * {{{mbkenv}}} pour initialiser {{{Alliance}}} . Cette fonction ne prend aucun paramètre et ne rend rien mais elle intialise un certain nombre de variables globales et elle lit l'environnement unix concernant Alliance. Elle doit etre invoquée au début de la fonction main().
     115 * {{{addlofig}}} pour créer l'{{{entity}}} et les {{{component}}}s;
     116 * {{{getlofig}}} qui renvoie un pointeur vers une figure désignée par son nom;
     117 * {{{addlocon}}} pour créer les {{{port}}}, aussi bien dans les figures que dans les instances;
     118 * {{{addlosig}}} pour créer les {{{signal}}}s;
     119 * {{{addloins}}} pour créer les {{{instance}}}s;
     120 * {{{addchain}}} pour créer les bipointeurs;
     121 * {{{reverse}}} pour «renverser» l'ordre des éléments dans une liste de type chain;
     122 * {{{freechain}}} pour libérer une liste créée par {{{addchain}}};
     123 * {{{namealloc}}} pour insérer tous les noms dans un dictionnaire.
    135124
     125Grâce à la fonction {{{namealloc() }}} différents pointeurs représentant la même chaîne de caractère
     126(et donc le même nom) pointent sur une unique zone de mémoire, permettant de tester l'identité
     127entre deux noms par un simple test d'égalité des pointeurs.
     128 
    136129Un fichier utilisant ces types et fonctions doit inclure le fichier {{{alliance.h}}},
    137130et l'édition de liens doit comporter {{{-lalliance}}}.  Ces fichiers référencés se trouvent
     
    139132et votre {{{Makefile}}} en conséquence.
    140133
    141 Indication : Pour construire la structure de données, on est amené à manipuler plusieurs
    142 structures lofig : On a une structure lofig correspondant à l'{{{entity}}} dont on souhaite
    143 construire la net-list, mais on est amené à construire une structure lofig pour chacune
     134'''Indication''' : Pour construire la structure de données ''lofig'', on est amené à manipuler plusieurs
     135structures de type ''lofig'' : On a une structure ''lofig'' correspondant à l'{{{entity}}} dont on souhaite
     136construire la net-list, mais on est amené à construire une structure ''lofig'' pour chacune
    144137des figures instanciées (c'est à dire pour chacun des {{{component}}}). Les structures
    145138lofig associées aux {{{component}}} sont des boîtes "vides", qui ne contiennent que
    146 la liste de porta, mais pas d'instances et pas de signaux.
     139la liste de ports, mais pas d'instances et pas de signaux.
    147140Vous utiliserez deux variables globales, l'une pointant sur la figure représentant
    148141l'{{{entity}}}, et l'autre pointant sur le {{{component}}} en cours d'analyse,
    149142et vous construirez la structure de donnée dans l'ordre suivant:
    150143
    151  1. ajoutez la figure;
    152  1. ajoutez les ports de la figure et les signaux externes;
    153  1. ajoutez les components;
    154  1. ajoutez les signaux internes;
    155  1. ajoutez les instances.
    156     Vous ferez l'hypothèse simplificatrice que les connecteurs de
    157     l'instance (port map) \emph{sont dans le même ordre} que les connecteurs du
    158     modèle (component);
     144 1. créez la figure;
     145 1. créez les ports de la figure et les signaux externes;
     146 1. créez les components;
     147 1. créez les signaux internes;
     148 1. créez les instances.
     149   
     150Vous ferez l'hypothèse simplificatrice que les connecteurs de l'instance (construction {{{port map}}} )
     151sont dans le même ordre que les connecteurs du modèle (construction {{{component}}} );
    159152
    160153Pour vous aider à déboguer et vérifier que la construction est correcte, vous pouvez utiliser
    161 la fonction {{{viewlofig}}}. Vous pouvez également sauvegarder sur disque la structure de données
    162 construite en mémoire en utilisant la fonction {{{savelofig}}}.
    163 Il est préférable de changer le nom de la figure avant d'effectuer la sauvegarde,
    164 sans oublier d'utiliser la fonction {{{namealloc}}}.
     154la fonction {{{viewlofig() }}}. Vous pouvez également sauvegarder sur disque la structure de données
     155construite en mémoire en utilisant la fonction {{{savelofig() }}}.
     156Il est préférable de changer le nom de la figure avant d'effectuer la sauvegarde pour éviter
     157d'écraser le fichier initial, sans oublier d'utiliser la fonction {{{namealloc() }}}.
    165158
    166159= Compte-Rendu =