talzou
Messages postés4Date d'inscriptionvendredi 7 mars 2008StatutMembreDernière intervention24 mars 2008
-
18 mars 2008 à 20:22
cs_exar
Messages postés286Date d'inscriptionvendredi 5 décembre 2003StatutMembreDernière intervention22 avril 2012
-
17 juil. 2010 à 15:43
salut
si vous pouvez m'aider j'ai besoins d'un code source pour un analyseur lexical de langage pascal programmer en c ou c++
merci
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 19 mars 2008 à 10:21
Salut,
Regarde du coté de FLEX et BISON, flex est un analyseur lexical qui se base sur des regexp, et bison et un compilateur de compilateur.
Jette un oeil sur google tu trouveras pas mal de doc la dessus.
talzou
Messages postés4Date d'inscriptionvendredi 7 mars 2008StatutMembreDernière intervention24 mars 2008 24 mars 2008 à 12:04
salut
je cherche le code source pour l'analyseur lexical et syntaxique complé qui decrit un programme pascal (table d'identificateur , de separateur, des mots clés opperateur )si vous pouvez pour le samedi prochain parce que c'est le TP annuel vraiment j'ai besoins de votre aide
merci
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;
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 ');