next up previous contents
Next: Réduction Up: Implantation de l'analyseur syntaxique Previous: Implantation de l'analyseur syntaxique

Décalage

lex construit dans TOKEN l'unité lexicale courante. Ensuite on essaie d'utiliser cette unité pour l'application d'une règle, c'est-à-dire en fin de la liste des symbôles. Si cela échoue, on continue à décaler.

parse(AXIOM,SOURCE,SYMBOLS):-
    shift(AXIOM,SOURCE,SYMBOLS).

shift(AXIOM,SOURCE,SYMBOLS):-
    lex(TOKEN,SOURCE,REST),
    (
        /* On n'applique les règles qu'à la queue */
        (HEAD := BODY),
        apply_rule((HEAD := BODY),[TOKEN|SYMBOLS],NEW_SYMBOLS),
        parse(AXIOM,REST,NEW_SYMBOLS)
    ;
        /* Si pas de règle applicable en queue : on continue à décaler */
        shift(AXIOM,REST,[TOKEN|SYMBOLS])
    ).



Christophe Delord
1998-09-02