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]) ).