Analyseur lexical et syntaxique

Signaler
Messages postés
4
Date d'inscription
vendredi 7 mars 2008
Statut
Membre
Dernière intervention
24 mars 2008
-
Messages postés
286
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
22 avril 2012
-
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
A voir également:

5 réponses

Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
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.

Shell
Messages postés
4
Date d'inscription
vendredi 7 mars 2008
Statut
Membre
Dernière intervention
24 mars 2008

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
Messages postés
1
Date d'inscription
jeudi 29 mai 2008
Statut
Membre
Dernière intervention
1 juin 2008

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.
Messages postés
1
Date d'inscription
mercredi 25 février 2009
Statut
Membre
Dernière intervention
24 avril 2009

salut , moi aussi je besoin un programme écrit en c++ qui simule la tache d'une analyseur syntaxique du langag pascal par la méthode SLR ascendante .
Messages postés
286
Date d'inscription
vendredi 5 décembre 2003
Statut
Membre
Dernière intervention
22 avril 2012
2
Ben faites-le ! Vous pensez vraiment que quand vous serez au boulot vous aurez le temps d'attendre que quelqu'un fasse votre travail ?