27 mars 2014 : Écriture en C++ d'un analyseur descendant

Jean-François Perrot

  1. Organisation
  2. La notation polonaise préfixée
  3. La grammaire proposée par Louis Lecailliez



Mise en œuvre en C++ de la stratégie d'analyse descendante,
sous la forme d'un programme C++ qui produit
avec la pile (de string) vue avec M.A. Moreaux et un lexeur produit par FOMA (voyez la page sur l'analyse lexicale).
Pour mémoire : le code de la pile pile.h et pile.cpp.

  1. Organisation

  2. La notation polonaise préfixée

    1. S -> op S S
    2. S -> cte
    3. S -> var

    Exemple : chaîne "+*    12+xxx    89+678    yyy " dans le fichier "e.txt"

    jfp$ ./pp <  e.txt
    + -- S
    * -- S S
    12 -- S S S
    + -- S S
    xxx -- S S S
    89 -- S S
    + -- S
    678 -- S S
    yyy -- S
    OK : 1 1 2 1 3 2 1 2 3



  3. La grammaire proposée par Louis Lecailliez

    1. S -> ( op2 S S )
    2. S -> ( op1 S )
    3. S -> chn

    avec op2 = '||', '&&' et op1 = '~'.

    Exemple : chaîne "(~(|| xxx (&& (~ vvv) yyy)) ) " dans le fichier "e.txt"

    jfp$ ./pp <  e.txt
    ( -- S
    ( -- S pf
    xxx -- S S pf pf
    ( -- S pf pf
    ( -- S S pf pf pf
    vvv -- S pf S pf pf pf
    ) -- pf S pf pf pf
    yyy -- S pf pf pf
    ) -- pf pf pf
    ) -- pf pf
    ) -- pf
    OK : 2 1 3 1 2 3 3