Analyseur lexical et syntaxique

talzou Messages postés 4 Date d'inscription vendredi 7 mars 2008 Statut Membre Dernière intervention 24 mars 2008 - 18 mars 2008 à 20:22
cs_exar Messages postés 286 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 22 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

5 réponses

DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Derniè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.

Shell
0
talzou Messages postés 4 Date d'inscription vendredi 7 mars 2008 Statut Membre Dernière intervention 24 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
0
mkac Messages postés 1 Date d'inscription jeudi 29 mai 2008 Statut Membre Dernière intervention 1 juin 2008
1 juin 2008 à 16:42
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.
0
cs_hana85 Messages postés 1 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 24 avril 2009
24 avril 2009 à 08:40
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 .
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_exar Messages postés 286 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 22 avril 2012 1
17 juil. 2010 à 15:43
Ben faites-le ! Vous pensez vraiment que quand vous serez au boulot vous aurez le temps d'attendre que quelqu'un fasse votre travail ?
0
Rejoignez-nous