Changes between Version 6 and Version 7 of CaoCourseTme3


Ignore:
Timestamp:
Feb 15, 2007, 7:47:01 PM (18 years ago)
Author:
alain
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • CaoCourseTme3

    v6 v7  
    100100= Etape 3 : Ecriture d'un premier analyseur syntaxique =
    101101
    102 Il faut maintenant définir dans le fichier ''vst.y'' les règles de la grammaire
    103 correspondant au format ''.vst''. Ce fichier "vst.y'' est utilisé par '''bison''' pour
    104 générer la fonction .c constituant l'analyseur lexical.
    105 Ces règles de grammaire sont des combinaisons de token reconnus par flex.
     102L'outil '''bison''' est un générateur d'analyseur syntaxique.
     103Il prend en entrée un fichier ''vst.y'' contenant la définition des règles de la grammaire
     104correspondant au format ''.vst'', et génère la fonction yyparse() constituant l'analyseur
     105syntaxique, dans un fichier vst.tab.c.
     106
    106107Dans ce TME, il ne sera pas question d'analyse sémantique ni même
    107108d'actions à effectuer lorsqu'une règle est activée.
    108109On se borne donc à effectuer l'analyse de syntaxe en s'assurant que les structures
    109 grammaticales dÈfinies permettent effectivement d'analyser le fichier ''exemple.vst''.
     110grammaticales définies permettent effectivement d'analyser le fichier ''exemple.vst''.
    110111
    111112Cette étape vise à analyser le fichier ''signal.ex'', qui ne constitue qu'une
     
    171172= Etape 4 : Fin de l'écriture de l'analyseur syntaxique =
    172173
    173 L'idée est de construire l'analyseur de manière incrémentale de maniËre incrÈmentale.
    174 La syntaxe de la dÈclaration des signaux ayant ÈtÈ dÈfinie, vous allez,
    175 dans cet ordre~:
    176 \begin{enumerate}
    177 \itemsep=-.5ex
    178 \item dÈfinir les rËgles de dÈclaration des ports en partant
    179       de l'exemple \texttt{port.ex} qui vous est fourni~;
    180 \item dÈfinir les rËgles de dÈclaration du composant en partant
    181       de l'exemple \texttt{component.ex} qui vous est fourni~;
    182 \item dÈfinir les rËgles de dÈclaration de l'entitÈ en partant
    183       de l'exemple \texttt{entity.ex} qui vous est fourni~;
    184 \item dÈfinir toutes les rËgles nÈcessaires ‡ la lecture du fichier
    185       \texttt{exemple.vst}.
    186 \end{enumerate}
     174Une règle de grammaire est construction grammaticale utilisant des token reconnus par ''flex''...
     175ou d'autres constructions grammaticales, plus simples. La grammaire a donc une structure arborescente.
    187176
    188 Vous pouvez faire des validations intermÈdiaires simplement en dÈclarant
    189 un nouveau symbole de dÈpart gr‚ce ‡
    190 %\small
    191 \begin{verbatim}
     177Dessinez explicitement le graphe représentant la grammaire associée au format ''.vst''.
     178Dans ce graphe, qui a - presque - une structure d'arbre, chaque noeud correspond à une construction grammaticale
     179(c'est à dire une règle de grammaire), et un arc orienté entre deux noeuds X et Y signifie : "La construction grammaticale
     180Y est contenue dans la construction grammaticale X". Les constructions grammaticales élémentaires sont les tokens,
     181et constituent les "feuilles" de l'arbre.
     182
     183La syntaxe de la construction grammaticale correspondant à la déclaration d'un signal a déjà été définie. Il reste donc à :
     184  1. Définir la construction grammaticale correspondant à la délaration d'un port
     185  1. Définir la construction grammaticale correspondant à la déclaration d'un composant
     186  1. Définir la construction grammaticale correspondant à la déclaration d'une entité
     187  1. Définir la construction grammaticale correspondant à la déclaration d'une instance
     188  1. Définir toutes les règles nécessaires à l'analyse du fichier complet.
     189 
     190Vous pouvez faire des validations intermédiaires simplement en utilisant le symbole racine:
     191{{{
    192192%start regle
    193 \end{verbatim}
    194 \normalsize
    195 
    196 Vous pouvez considÈrer que le TME est terminÈ lorsque le parser construit
    197 ‡ partir des deux fichiers vst.l et vst.y est capable de lire et de reconnaitre
    198 la totalitÈ du fichier exemple.vst.
    199 
    200 \small
    201 \subsubsection*{signal.ex}
    202 \begin{multicols}{2}
    203 \begin{verbatim}
    204 signal opc    : bit;
    205 signal read   : bit;
    206 signal lock   : bit;
    207 signal a      : bit;
    208 signal d      : bit;
    209 signal ack    : bit;
    210 signal tout   : bit;
    211 signal it_0   : bit;
    212 signal req0   : bit;
    213 signal req1   : bit;
    214 signal gnt0   : bit;
    215 signal gnt1   : bit;
    216 signal sel1   : bit;
    217 signal sel2   : bit;
    218 signal sel3   : bit;
    219 signal sel4   : bit;
    220 signal sel5   : bit;
    221 signal sel6   : bit;
    222 signal sel7   : bit;
    223 signal sel8   : bit;
    224 signal sel9   : bit;
    225 signal snoopdo: bit;
    226 \end{verbatim}
    227 \end{multicols}
    228 \subsubsection*{port.ex}
    229 \begin{multicols}{2}
    230 \begin{verbatim}
    231    port (
    232       clk    : in bit;
    233       resetn : in bit;
    234       ireq   : out bit;
    235       ignt   : in bit;
    236       dreq   : out bit;
    237       dgnt   : in bit;
    238       opc    : out bit;
    239       lock   : out bit;
    240       read   : inout bit;
    241       a      : inout bit;
    242       d      : inout bit;
    243       ack    : in bit;
    244       tout   : in bit;
    245       it_0   : in bit;
    246       it_1   : in bit;
    247       it_2   : in bit;
    248       it_3   : in bit;
    249       it_4   : in bit;
    250       it_5   : in bit;
    251       snoopdo: in bit
    252    );
    253 \end{verbatim}
    254 \end{multicols}
    255 \subsubsection*{component.ex}
    256 \begin{multicols}{2}
    257 \begin{verbatim}
    258 component PIR3000
    259    port (
    260       clk    : in bit;
    261       resetn : in bit;
    262       ireq   : out bit;
    263       ignt   : in bit;
    264       dreq   : out bit;
    265       dgnt   : in bit;
    266       opc    : out bit;
    267       lock   : out bit;
    268       read   : inout bit;
    269       a      : inout bit;
    270       d      : inout bit;
    271       ack    : in bit;
    272       tout   : in bit;
    273       it_0   : in bit;
    274       it_1   : in bit;
    275       it_2   : in bit;
    276       it_3   : in bit;
    277       it_4   : in bit;
    278       it_5   : in bit;
    279       snoopdo: in bit
    280    );
    281 end component;
    282 \end{verbatim}
    283 \end{multicols}
    284 \subsubsection*{entity.ex}
    285 \begin{verbatim}
    286 entity EXEMPLE is
    287    port (
    288       clk    : in bit;
    289       resetn : in bit
    290    );
    291 end exemple;
    292 \end{verbatim}
    293 \scriptsize
    294 \newpage
    295 \subsubsection*{expemple.vst}
    296 \begin{multicols}{2}
    297 \begin{verbatim}
    298 end exemple;
    299 entity EXEMPLE is
    300    port (
    301       clk    : in bit;
    302       resetn : in bit
    303    );
    304 end exemple;
    305 
    306 architecture structural of system is
    307 component PIR3000
    308    port (
    309       clk    : in bit;
    310       resetn : in bit;
    311       ireq   : out bit;
    312       ignt   : in bit;
    313       dreq   : out bit;
    314       dgnt   : in bit;
    315       opc    : out bit;
    316       lock   : out bit;
    317       read   : inout bit;
    318       a      : inout bit;
    319       d      : inout bit;
    320       ack    : in bit;
    321       tout   : in bit;
    322       it_0   : in bit;
    323       it_1   : in bit;
    324       it_2   : in bit;
    325       it_3   : in bit;
    326       it_4   : in bit;
    327       it_5   : in bit;
    328       snoopdo: in bit
    329    );
    330 end component;
    331 
    332 component PIRAM
    333    port (
    334       clk    : in    bit;
    335       resetn : in    bit;
    336       sel    : in    bit;
    337       opc    : in    bit;
    338       read   : in    bit;
    339       a      : in    bit;
    340       d      : inout bit;
    341       ack    : out   bit;
    342       tout   : in    bit
    343    );
    344 end component;
    345 
    346 component PITTY
    347    port (
    348       clk    : in bit;
    349       resetn : in bit;
    350       sel    : in bit;
    351       opc    : in bit;
    352       read   : in bit;
    353       a      : in bit;
    354       d      : inout bit;
    355       ack    : out bit;
    356       tout   : in bit
    357    );
    358 end component;
    359 
    360 component PIBCU
    361     port (
    362        clk     : in bit;
    363        req0    : in bit;
    364        req1    : in bit;
    365        gnt0    : out bit;
    366        gnt1    : out bit;
    367        sel1    : out bit;
    368        sel2    : out bit;
    369        sel3    : out bit;
    370        sel4    : out bit;
    371        sel5    : out bit;
    372        sel6    : out bit;
    373        sel7    : out bit;
    374        sel8    : out bit;
    375        sel9    : out bit;
    376        snoopdo : out bit;
    377        resetn  : in bit;
    378        opc     : in bit;
    379        read    : in bit;
    380        lock    : in bit;
    381        a       : in bit;
    382        d       : inout bit;
    383        ack     : inout bit;
    384        tout    : out bit;
    385        it      : out bit
    386     );
    387 end component;
    388 
    389 signal opc    : bit;
    390 signal read   : bit;
    391 signal lock   : bit;
    392 signal a      : bit;
    393 signal d      : bit;
    394 signal ack    : bit;
    395 signal tout   : bit;
    396 
    397 signal it_0   : bit;
    398 signal it_1   : bit;
    399 signal it_2   : bit;
    400 signal it_3   : bit;
    401 signal it_4   : bit;
    402 signal it_5   : bit;
    403 
    404 signal req0   : bit;
    405 signal req1   : bit;
    406 
    407 signal gnt0   : bit;
    408 signal gnt1   : bit;
    409 
    410 signal sel1   : bit;
    411 signal sel2   : bit;
    412 signal sel3   : bit;
    413 signal sel4   : bit;
    414 signal sel5   : bit;
    415 signal sel6   : bit;
    416 signal sel7   : bit;
    417 signal sel8   : bit;
    418 signal sel9   : bit;
    419 signal snoopdo: bit;
    420 
    421 begin
    422 
    423    r3000 : Pir3000
    424    port map (
    425       clk     => clk,
    426       resetn  => resetn,
    427       ireq    => req0,
    428       ignt    => gnt0,
    429       dreq    => req1,
    430       dgnt    => gnt1,
    431       opc     => opc,
    432       lock    => lock,
    433       read    => read,
    434       a       => a,
    435       d       => d,
    436       ack     => ack,
    437       tout    => tout,
    438       snoopdo => snoopdo,
    439       it_0    => it_0,
    440       it_1    => it_1,
    441       it_2    => it_2,
    442       it_3    => it_3,
    443       it_4    => it_4,
    444       it_5    => it_5
    445    );
    446 
    447    rst : piram
    448    port map (
    449       clk    => clk,
    450       resetn => resetn,
    451       sel    => sel1,
    452       opc    => opc,
    453       read   => read,
    454       a      => a,
    455       d      => d,
    456       ack    => ack,
    457       tout   => tout
    458    );
    459 
    460    exc : piram
    461    port map (
    462       clk    => clk,
    463       resetn => resetn,
    464       sel    => sel2,
    465       opc    => opc,
    466       read   => read,
    467       a      => a,
    468       d      => d,
    469       ack    => ack,
    470       tout   => tout
    471    );
    472 
    473    bcu : pibcu
    474    port map (
    475       clk    => clk,
    476       req0   => req0,
    477       req1   => req1,
    478 
    479       gnt0   => gnt0,
    480       gnt1   => gnt1,
    481      
    482       sel1   => sel1,
    483       sel2   => sel2,
    484       sel3   => sel3,
    485       sel4   => sel4,
    486       sel5   => sel5,
    487       sel6   => sel6,
    488       sel7   => sel7,
    489       sel8   => sel8,
    490       sel9   => sel9,
    491 
    492       resetn => resetn,
    493       opc    => opc,
    494       read   => read,
    495       lock   => lock,
    496       a      => a,
    497       d      => d,
    498       ack    => ack,
    499       tout   => tout,
    500       snoopdo=> snoopdo,
    501       it     => it_1
    502    );
    503 
    504    ins : piram
    505    port map (
    506       clk    => clk,
    507       resetn => resetn,
    508       sel    => sel3,
    509       opc    => opc,
    510       read   => read,
    511       a      => a,
    512       d      => d,
    513       ack    => ack,
    514       tout   => tout
    515    );
    516 
    517    dat : piram
    518    port map (
    519       clk    => clk,
    520       resetn => resetn,
    521       sel    => sel4,
    522       opc    => opc,
    523       read   => read,
    524       a      => a,
    525       d      => d,
    526       ack    => ack,
    527       tout   => tout
    528    );
    529      
    530    tty : pitty
    531    port map (
    532       clk    => clk,
    533       resetn => resetn,
    534       sel    => sel5,
    535       opc    => opc,
    536       read   => read,
    537       a      => a,
    538       d      => d,
    539       ack    => ack,
    540       tout   => tout
    541    );
    542 
    543    ttz : pitty
    544    port map (
    545       clk    => clk,
    546       resetn => resetn,
    547       sel    => sel9,
    548       opc    => opc,
    549       read   => read,
    550       a      => a,
    551       d      => d,
    552       ack    => ack,
    553       tout   => tout
    554    );
    555    
    556 end structural;
    557 \end{verbatim}
    558 \end{multicols}
    559 
    560 \end{document}
    561 
    562 
     193}}}
     194Vous pouvez considérer que le TME est terminé lorsque le parser construit
     195à partir des deux fichiers ''vst.l'' et ''vst.y'' est capable de lire et de reconnaitre
     196la totalité du fichier ''exemple.vst''.