%{ uses lexlib; Type Classes = (recherche, article, nom, pronom, verbe, adjectif, conjonction, preposition) ; MotCl = record mot : string ; classe : Classes end ; Const Max = 100 ; Var mode : Classes ; table : array[1..Max] of MotCl ; ltable : integer ; procedure ranger(c : Classes ; m : string) ; var i : integer ; begin i := 1 ; while (i <= ltable) and ((c <> table[i].classe) or (m <>table[i].mot)) do i := i+1 ; if i > ltable then begin ltable := ltable + 1 ; table[ltable].classe := c ; table[ltable].mot := m end end ; procedure rechercher(m : string) ; var i : integer ; trouve : boolean ; begin i := 1 ; trouve := false ; write(m, ' : ') ; while (i <= ltable) do begin if m = table[i].mot then begin case table[i].classe of article : writeln('article'); nom : writeln('nom') ; pronom : writeln('pronom') ; verbe : writeln('verbe') ; adjectif : writeln('adjectif') ; conjonction: writeln('conjonction') ; preposition : writeln('preposition') end ; trouve := true end ; i := i+1 end ; if (not trouve) then write('inconnu') ; writeln end ; %} %% ^article mode := article ; ^nom mode := nom ; ^pronom mode := pronom ; ^verbe mode := verbe ; ^adjectif mode := adjectif ; ^conjonction mode := conjonction ; ^preposition mode := preposition ; \n mode := recherche ; [a-z]+ if mode = recherche then rechercher( yytext) else ranger(mode, yytext) ; . ; %% begin ltable := 0 ; mode := recherche ; writeln('Tapez "nom toto" pour declarer toto comme un nom'); writeln('Tapez "verbe toter" pour declarer toter comme un verbe etc'); writeln('Etc. Ensuite vous pouvez taper une phrase pour l''analyser'); writeln('Ctrl-C pour quitter'); yylex end.