analyseur lexical en turbo pascal program automate;
uses wincrt;
const G= ['a'..'z','A'..'Z']; F= ['a'..'z','A'..'Z','0'..'9']; blan=' '; var
mot,motval:string; n,rang,long,maxi:integer; longmax,sortis,blancs,vide,appG,appF:boolean; choix:char;
(********************************* fonction espace*********************************************)
function espace(a:char):boolean; begin espace:=(a=blan); end;
(*********************************procedure etat2 *********************************************)
procedure etat2(mot:string;L:integer;var rang:integer;var vide:boolean; var appG:boolean); begin while (rang<=L)and(espace(mot[rang]))do rang:= rang+1; vide:=(rang>L); if not vide then appG:=(mot[rang]in G) ; end; (********************************* procedure etat3 ********************************************)
procedure etat3(mot:string;n:integer;max:integer;var rang:integer; var long:integer;var tropc:boolean;var blanc:boolean; var sortie:boolean;appF:boolean); begin while (rang<=n)and(long<=max)and(mot[rang]in F) do begin rang:= rang+1; long:=long+1; end; sortie:=(rang>n); if not sortie then begin tropc:=(long>max); blanc:= (espace(mot[rang])) ; appF:=mot[rang]in F end; end;
{********************************* PROGRAMME PRINCIPAL***************************************} BEGIN repeat clrscr;
write('Donnez le nombre maximale de caractères significatifs: '); readln(maxi); write('Donnez la chaine à analyser : ');
readln(mot); n:=length(mot); rang:=1;
if not espace(mot[rang]) then writeln('votre 1ere lettre doit etre un vide: erreur1 ') else begin rang:=rang+1; vide:=false; appG:=false; etat2(mot,n,rang,vide,appG); if (vide) then begin writeln; writeln('!!!votre mot est vide!!!: erreur2 '); end else if not appG then writeln('le 1er caractere significatif n''est pas une lettre alphabetique: erreur3 ') else begin long:=1; motval:=mot[rang]; rang:=rang+1; longmax:=false; blancs:=false; sortis:=false; appF:=false;
etat3(mot,n,maxi,rang,long,longmax,blancs,sortis,appF);
if sortis then writeln('votre mot doit se terminer par Espace: erreur4 ') else if longmax then writeln('Vous avez exceder la longueur maximale autorisée : erreur5 ') else if not blancs then begin writeln(' Votre mot contient un caractere non autorisé : erreur6'); writeln(' le caractère est : ',mot[rang]); end else writeln('le mot est valide '); end; end; write(' Voulez-vous continuer (o/n): ');
read(choix); until (choix='n') or (choix='N'); clrscr; gotoxy(35,13); write('aurevoir'); readln; END.
|