%{
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.


