next up previous contents
Next: Analyses syntaxique et sémantique Up: Syntaxe de la grammaire Previous: Syntaxe de la grammaire

Analyse lexicale

L'utilisateur doit fournir un prédicat lex(TOKEN, IN, OUT). TOKEN est unifié avec l'unité lexicale reconnue en tête de IN. OUT correspond à l'entrée IN à laquelle l'unité lexicale a été retirée.

lex(separateur)-->" ".
lex(operateur(+,2))-->"+".			% priorité 2
lex(operateur(-,2))-->"-".
lex(operateur(*,1))-->"*".
lex(operateur(/,1))-->"/".
lex(openpar)-->"(".
lex(closepar)-->")".
lex(end)-->";"
lex(reel(V))-->entier(IP),fp(FP),{V is IP+FP}.
lex(entier(E))-->entier(E).

lex(bidon)-->[_].

entier(I)-->chiffres(C), {name(I,C)}.

fp(FP)-->".",{!},chiffres(C),{name(X,C), length(C,L), FP is X/10^L}.
fp(0)-->[].

chiffres([C|S])-->chiffre(C),(chiffres(S);{S=[]}),{!}.
chiffre(C)-->[C],{between(0'0,0'9,C)}.

La syntaxe utilisée est compatible avec celle des règles de grammaires reconnue par Prolog, cela simplifie l'écriture de l'analyseur lexical.



Christophe Delord
1998-09-02