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.