demi compilateur

نرمين*

  • Global Moderator
  • Hero Member
  • *****
    • مشاركة: 3989
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
في: تـمـوز 27, 2009, 07:12:44 صباحاً
اولا هده هي grammmiare الي رايحين نعمل عليها
nalyse syntaxique par methode descente recursive *********/
 
//     ************  la grammaire utils‚ dans l'analyse syntaxique  *********
 
//                   -> program id;
//                   ->
//            -> var |‡
//              -> :|:;
//                -> id|id,
//                   -> integer|array[const..const]of integer
//                   -> begin end
//              -> |;
// -> :=|ifthen|whiledo
//                    ->
//           -> |
//                  -> |
//                -> not|()|const|
//                -> id|id[id]|id[const]
//                  -> +|-|or
//                  -> *|/|and
//                  -> =|<>|>|>=|<|<=


نرمين*

  • Global Moderator
  • Hero Member
  • *****
    • مشاركة: 3989
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #1 في: تـمـوز 27, 2009, 10:18:29 مسائاً
اولا la declaration


#include
#include
#include
#include

/********************* d‚claration du table lexical ***********************/

struct tb_lex{char unit_l[15]; //nom d'unit‚ lexical
         char type_l[6];  //type d'unit‚ lexical
         int  taile_l;    //taille d'unit‚ lexical
         int  nligne_l;   //la ligne d'une unit‚ lexical
         struct tb_lex *next;};//une list chain‚
         typedef struct tb_lex *list_lex; //d‚finition d'un nouveau type " list_lex "


/********************* d‚claration des variables globales **********************/

/*.......................*/
list_lex list_lexical,temp,list_id=NULL;
tb_lex symb;//symbol courrant
tb_lex symba;// ancien symbol
//void dicsine_cadre(int,int,int,int,int);
void dicsine_cadre1(int,int,int,int,int);
int nbligne=1;//num‚ro de la ligne
int i,c;

void main()
لكي يعمل برنامجك جيدا يجب استعمال fonction تساعدك على ذلك
 
 
/***************** les fonctions utilis‚ dans l'analyse syntaxique  *******************/
         /* 1  */  list_lex analyse_bloc(list_lex);
         /* 2  */  list_lex analyse_declaration(list_lex);
         /* 3  */  list_lex analyse_corp(list_lex);
         /* 4  */  list_lex analyse_list_type(list_lex);
         /* 5  */  list_lex analyse_list_id(list_lex);
         /* 6  */  list_lex analyse_type(list_lex);
         /* 7  */  list_lex analyse_list_inst(list_lex);
         /* 8  */  list_lex analyse_inst(list_lex);
         /* 9  */  list_lex analyse_exp(list_lex);
         /* 10 */  list_lex analyse_exp_simple(list_lex);
         /* 11 */  list_lex analyse_terme(list_lex);
         /* 12 */  list_lex analyse_facteur(list_lex);
         /* 13 */  list_lex analyse_pgauche(list_lex);
         /* 14 */  list_lex analyse_addop(list_lex);
         /* 15 */  list_lex analyse_mulop(list_lex);
         /* 16 */  list_lex analyse_relop(list_lex);
         /* 17 */  list_lex analyse_exp_simple_prime(list_lex);
         /* 18 */  list_lex analyse_terme_prime(list_lex);
 
/****************** fin d‚claration des variables globales *********************/
 
 
/***************** fonction pour transf‚rer tous les caractŠres en majuscule **********/
 
char majscul(char x)
{char t1[26]={'a','b','c','d','e','f','g','h','i','j','k','l',  'm','n','o','p','q','r','s','t','u','v','w','x','y  ','z'},
      t2[26]={'A','B','C','D','E','F','G','H','I','J','K','L',  'M','N','O','P','Q','R','S','T','U','V','W','X','Y  ','Z'};
      int i=0,n=26;
 while ( (x!=t1) && (i++ if(i==n) return (x);// si x est un caractŠre majuscule
 else return (t2);// si x est un caractŠre minuscule
}
 
/******************* fonction  pour reconnaitre le type d'un caractére **********************/
 
int typec(char x[1])
{char *chiffre[10]={"0","1","2","3","4","5","6","7","8","9"};
 int i=0,n=10;
 x[1]='';
 { while ( (strcmp(x,chiffre)!=0) && (i++       if(i==n) return (0);// si x est un caractŠre
   else return (1); } // si x est un chiffre
}
 
/***************** fonction de recherche dans un tableau *******************/
 
int recherche(char *t[],int n ,char x[8])
{ int i=0;
while( (strcmp(x,t)!=0 ) && (i++  if(i==n){return (1);}  //n'exist pas dans la table
  else{return (0);}     //exist dans la table
}
/*************** fonction d'insertion … la fin d'une liste *******************/
 
list_lex insert(list_lex q,char element[8],int tpc,int tail,int nl)
{list_lex l,temp=q;
 char *tpu0="ident",*tpu1="const",*tpu2="opera",*tpu3="c  l‚",*blan=" ",tpu[5];
 stpcpy(tpu,blan);
 switch(tpc)
 { case 0 :stpcpy(tpu,tpu0);break;// si le type d'unit‚ lexical est un identificateur
   case 1 :stpcpy(tpu,tpu1);break;// si le type d'unit‚ lexical est un constant
   case 2 :stpcpy(tpu,tpu2);break;// si le type d'unit‚ lexical est un op‚rateur
   case 3 :stpcpy(tpu,tpu3);break;// si le type d'unit‚ lexical est un cl‚
   default:break; }
 
l=(list_lex)malloc(sizeof(struct tb_lex));
   stpcpy(l->unit_l,element);
   stpcpy(l->type_l,tpu);
   l->taile_l=tail;
   l->nligne_l=nl;
   l->next=NULL;
 
if (q==NULL)return l;
 
while(temp->next != NULL) temp=temp->next;temp->next=l;
 
 
return q;
 
}
/************************ lecture symbol du list lexical ********************/
tb_lex lire_symbol(list_lex l)
{tb_lex t;
   stpcpy(t.unit_l,l->unit_l);
   stpcpy(t.type_l,l->type_l);
   t.taile_l=l->taile_l;
   t.nligne_l=l->nligne_l;
 return (t);
 }
//**************************************************  ************************//
 
//************** recherche d'un ‚l‚ment dans une list chain‚ **************//
int rech_list(list_lex l,char *t)
{
while((l!= NULL)&&(strcmp(l->unit_l,t)!=0) )
l=l->next;
 
if(l==NULL)
return 1;
else
return 0;
     }
/*..............................*/
int err(int sp)
{
textbackground(0);window(2,8,2,19);textcolor(15);c  lrscr();
gotoxy(1,sp+1);textcolor(4+BLINK);cprintf("*");
textbackground(0);window(34,9,59,22);textcolor(15)  ;clrscr();
textcolor(4+BLINK);cprintf("ERREUR : ");gotoxy(1,2);textcolor(3);
return 0;
}
/**************** ‚liminer les double dans une list ************************/
list_lex el_list(list_lex temp)
{list_lex l=NULL;int tp;
  while(temp!=NULL)
  {if(rech_list(l,temp->unit_l)!=0){
     if(strcmp(temp->type_l,"ident")==0)tp=0;
     if(strcmp(temp->type_l,"const")==0)tp=1;
     if(strcmp(temp->type_l,"opera")==0)tp=2;
     if(strcmp(temp->type_l,"cl‚")==0)tp=3;
     l=insert(l,temp->unit_l,tp,temp->taile_l,temp->nligne_l);
     temp=temp->next;}
   else{temp=temp->next;}
  }
  return l ;
}
/*......................................*/
 
 
/************* fonction pour afficher la table des unit‚s lexicales *************/
void afficher(list_lex temp1)
{list_lex temp=temp1;//temp=el_list(temp1);
int i=2;
int zz=1;
char *chs[50]={" "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," "," ",};
clrscr();
 
gotoxy(1,1);textcolor(12+BLINK);cprintf(".........  .......");
gotoxy(1,2);textcolor(12);cprintf(" ANALYSE LEXICAL");
gotoxy(1,3);textcolor(12);cprintf(" PREMIER PARTIE");
gotoxy(1,4);textcolor(12+BLINK);cprintf(".........  ......");
textbackground(1);window(1,6,61,24);textcolor(15);  clrscr();
gotoxy(3,1);cprintf("unit");gotoxy(12,1);cprintf(" type");gotoxy(22,1);cprintf("taille");gotoxy(32,1) ;cprintf("ligne");gotoxy(42,1);cprintf("suivant");
textbackground(0);window(2,7,60,23);textcolor(15);  clrscr();
textcolor(3);
while(temp!=NULL)
{
if((recherche(chs,50,temp->unit_l))!= 0)
{
  /*gotoxy(3,i);cprintf("%s",temp->unit_l);
  gotoxy(12,i);cprintf("%s",temp->type_l);
  gotoxy(22,i);cprintf("%d",temp->taile_l);
  gotoxy(32,i);cprintf("%d",temp->nligne_l);*/
  chs[zz-1]=temp->unit_l;
  zz++;
  i++;
/* if (i>=15)
 {textcolor(12+BLINK);gotoxy(6,i+2);cprintf("ENTER"  );
  textcolor(3);getchar();clrscr();i=2;
  textbackground(0);window(2,7,60,23);textcolor(3);c  lrscr(); }
*/ }
temp=temp->next;
}
temp=temp1;
int fl=1;
for (int y=0; y{
temp=temp1;int pp=0;
fl++;int lk=1;
if (fl-1>=15)
{textcolor(12+BLINK);gotoxy(2,17);cprintf("ENTER")  ;
textcolor(3);getchar();clrscr();fl=1;
textbackground(0);window(2,7,60,23);textcolor(3);c  lrscr(); }
while(temp!=NULL)
{
if(strcmp(chs[y],temp->unit_l)==0)
{
if (pp==0)
{
gotoxy(3,fl);cprintf("%s",temp->unit_l);
gotoxy(12,fl);cprintf("%s",temp->type_l);
gotoxy(22,fl);cprintf("%d",temp->taile_l);
gotoxy(32,fl);cprintf("%d",temp->nligne_l);
}
else
{
lk++;
gotoxy(36+pp+lk,fl);cprintf("%d,",temp->nligne_l);
}
pp++;
}
temp=temp->next;
}
}
getchar();textcolor(12+BLINK);gotoxy(6,16);cprintf  ("FIN PREMIER PARTIE");textcolor(3);
}
/*...................*/
/*void f(int x,int y)
{/*dicsine_cadre(45,49,1,79,10);gotoxy(x,y);textcolo  r(14);}
/*........................................*/
void ft(int x)
{
 
gotoxy(1,1);textcolor(12+BLINK);cprintf(".........  .......");
gotoxy(1,2);textcolor(12);cprintf("DEUXIEME PARTIE");
gotoxy(1,3);textcolor(12);cprintf("ANALYSE SYNTHAX");
gotoxy(1,4);textcolor(12+BLINK);cprintf(".........  ......");
textbackground(1);window(1,6,61,24);textcolor(15);  clrscr();
textbackground(0);window(2,7,60,23);textcolor(15);  clrscr();
FILE *fichier ;
textcolor(10);cprintf(" CODE SOURCE");
textcolor(11);
char ch;//dicsine_cadre1(x,x+1,0,76,12);
int sl,ss;
fichier = fopen("xxxx.by", "rt");
int kkl=3;
gotoxy(1,3);cprintf(" ");
do
{ch = fgetc(fichier);
//if (ch=='\n'){sl++;}
if (ch!='\n')
cprintf("%c",ch);
else
{kkl++;gotoxy(1,kkl);cprintf(" ");}
if (sl!=x){ss++;}
}while (ch != EOF);
fclose(fichier);
//textbackground(1);window(30,8,59,22);textcolor(15)  ;clrscr();
textbackground(0);window(34,9,59,22);textcolor(15)  ;clrscr();
}
/*...........................................*/
void fs()
{FILE *fichier ;
char ch;
fichier = fopen("xxxx.by", "rt");gotoxy(3,3);
do{ch = fgetc(fichier);
printf("%c",ch);
} while (ch != EOF);
fclose(fichier);
}





crazyinf

  • Newbie
  • *
    • مشاركة: 7
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #2 في: تشرين الأول 27, 2009, 06:47:46 مسائاً
Bonjour
Le lien ne marche pas
Autre chose, le demi compilateur de quel langage ?
Cordialement




نرمين*

  • Global Moderator
  • Hero Member
  • *****
    • مشاركة: 3989
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #3 في: تشرين الثاني 05, 2009, 06:29:40 صباحاً
fonction de l'analyse lexical  ***********************/
list_lex analyse_lexical()
{FILE *fichier,*fichier_m;//les fichier utils‚
list_lex list=NULL;
char nom[20],nom_fichier[20],unit_lex[8],ch,ch1,c[1],*exto=.txt",*blan=" ",*bl="{";
int comp,tpa,tpn,tpi,k,e=1;
char *tcs[24]={"=","<>",">","<","<=",">=","+","-","/","*","..",".",":","(",")",",",";","[",]","{","}",":="};
char *tcle[15]={"PROGRAM","BEGIN","END","IF","THEN","WHILE","DO"  ,"VAR","CONST","ARRAY","INTEGER","OF","AND","NOT",  "OR"};
char *tcs1[5]={"<",">",".",":",","};
gets(nom);printf("\n");
stpcpy(nom_fichier,nom);//fair un copier de nom dans nom_fichier
strcat(nom_fichier,exto);// concatin‚ nom_fichier et exto   exto:extonntion de fichier *.txt
if( (fichier = fopen(nom_fichier, "rt"))==NULL)
{
 
/*dicsine_cadre(45,49,1,79,10);*/
    gotoxy(5,1);textcolor(12+BLINK);cprintf("ERREUR");
     gotoxy(2,2);textcolor(10);cprintf("NOM DE FICHIER");
     gotoxy(2,3);textcolor(10);cprintf("N'EXISTE PAS..");
     getchar();exit(-1);
     }
   if( (fichier_m = fopen("xxxx.by", "w"))==NULL)  //xxxx.by est un fichier intermediare
   {printf(" \n le fichier xxxx.by n'exit pas  cr‚‚ le fichier");getchar();exit(-1);}
do{ch = fgetc(fichier); //transfret tous les caractre de fichier muniscul ou majscul
ch1=majscul(ch);
if(ch != EOF) fputc(ch1,fichier_m); //
} while (ch != EOF);//fin fichier
fclose(fichier);fclose(fichier_m);
/*************** traitement ***********************/
   fichier_m = fopen("xxxx.by", "rt");
   comp=0;k=0;tpn=0;stpcpy(unit_lex,blan);
   do
   {
   if(k==0)
   {ch=fgetc(fichier_m);c[0]=ch;c[1]='';}
   tpa=tpn; comp++; k=0;
 
   if((strcmp(c,blan)==0))tpn=2;//si caractre blan
   else{if(strcmp(c,bl)==0)tpn=5; //si caractre egal {
    else{if((c[0]==EOF)||(c[0]=='\n'))tpn=2 ; //si caractre fin fichier ou fin ligne
         else tpn=typec(c);}}//si caractre lettre(0) ou chiffre(1)
 
     if(c[0]=='\n') nbligne++; //fin ligne
 
    if ( (tpn!=5)&&(tpn!=2)&&(recherche(tcs,22,c))!= 0)
       { if (comp==1){tpi=tpn;}
        if(e!=0){if ( ((tpi==0)&&(comp>8)) ||((tpi==1)&&(comp>5)))
             {
             clrscr();
ft(nbligne);
textbackground(0);window(2,9,2,19);textcolor(15);c  lrscr();
gotoxy(1,nbligne);textcolor(4+BLINK);cprintf("*");
textbackground(0);window(3,19,59,22);textcolor(15)  ;clrscr();
gotoxy(2,2);textcolor(4+BLINK);cprintf("ERREUR : ");
textcolor(3);cprintf("DANS LA LIGNE : %d",nbligne);
gotoxy(2,3);cprintf("DEPACEMENT DE TAILLE");
// gotoxy(28,38);printf("TAPER ENTRER POUR CONTUNI");
getchar();e=0;/*exit(-1);*/}
else
{ if((tpa!=tpn)&&(tpn==0)&&(comp<=2))
{unit_lex[comp-1]=c[0];unit_lex[comp]='';clrscr();ft(nbligne);
textbackground(0);window(2,9,2,19);textcolor(15);c  lrscr();
gotoxy(1,nbligne);textcolor(4+BLINK);cprintf("*");
textbackground(0);window(3,19,59,22);textcolor(15)  ;clrscr();
gotoxy(2,2);textcolor(4+BLINK);cprintf("ERREUR : ");
textcolor(3);cprintf("DANS LA LIGNE : %d",nbligne);
getchar();e=0;/*exit(-1);*/}
else{unit_lex[comp-1]=c[0];}}}  }
else
{unit_lex[comp-1]='';
if((unit_lex[0]!='')&&(e!=0))
{if ( (recherche(tcle,15,unit_lex))== 0)
{list=insert(list,unit_lex,3,strlen(unit_lex),nbli  gne);} //unit_lex est une cl‚
else
{list=insert(list,unit_lex,tpi,strlen(unit_lex),nb  ligne);}}//unit_lex est une identificature ou constant
comp=0;stpcpy(unit_lex,blan);
unit_lex[0]=c[0];c[1]='';e=1;
if ((tpn!=5)&&(tpn!=2))
{if ( (recherche(tcs1,5,c))!= 0 )
{list=insert(list,unit_lex,2,1,nbligne);}//unit_lex est une operature simple
else
{ c[0]=fgetc(fichier_m); unit_lex[1]=c[0]; unit_lex[2]='';
if ((recherche(tcs,24,unit_lex))== 0)
{list=insert(list,unit_lex,2,2,nbligne);}//unit_lex est une operature compos‚
else
{unit_lex[1]='';list=insert(list,unit_lex,2,1,nbligne);k=1;}}}//unit_lex est une operature simple
else
{if(tpn==2) { do {c[0]=fgetc(fichier_m);}while(strcmp(c,blan)==0);k=1;tp  n=0;}//pour eliminer les blan
else{ do {c[0]=fgetc(fichier_m);}while(c[0]!='}');tpn=0;}}//pour eliminer les commentre
stpcpy(unit_lex,blan);tpn=0;comp=0;unit_lex[0]=''; //initialisation
}
}while(c[0]!=EOF);
return (list);//la liste des tous les unites lexical
}
/***************************** fin analyse lexical **************************/
 
 
/**************** analyse syntaxique par methode descente recursive

analys‚           -> program id; *************/
 
 
void analyse_prgm(list_lex list)
{char *fin=#";
 list=insert(list,fin,3,1,nbligne);
 symb=lire_symbol(list);list=list->next;
 if ((strcmp(symb.unit_l,"PROGRAM"))!=0){ft(symb.nlign  e_l);
     err(symb.nligne_l);
cprintf("Erreur ' %s ' dans la linge : ' %d ' qui est differrent de ' PROGRAM '",symb.unit_l,symb.nligne_l );getchar();exit(-1);}
 else{symb=lire_symbol(list); list=list->next; symba=symb;
      if ((strcmp(symb.type_l,"ident"))!=0){ft(symb.nligne_  l);
      err(symb.nligne_l);;
cprintf("Erreur: de type ' %s ' dans la linge : ' %d ' qui est differrent de 'IDENTIF' ",symb.unit_l,symb.nligne_l );getchar();exit(-1);}
      else{list_id=insert(list_id,symb.unit_l,0,0,0);
      symb=lire_symbol(list);list=list->next;
      if ((strcmp(symb.unit_l,";"))!=0){ft(symba.nligne_l-1);
err(symb.nligne_l); cprintf("Erreur: manque ' ; ' d'apr‚ ' %s ' dans la linge : ' %d ' ",symba.unit_l,symb.nligne_l-1 );getchar();exit(-1);}
      else{symba=symb;list=analyse_bloc(list);
      symb=lire_symbol(list);
      if((strcmp(symb.unit_l,"#"))==0){ft(2);err(symb.nl  igne_l);cprintf(" SUCCESS");}
      else{ft(symb.nligne_l);
      err(symb.nligne_l);
      cprintf("Erreur Ou Fin De Fichier ");getchar();}
      }
     }
      }
 
 }
 
/****************** analys‚         -> ***********/
 
list_lex analyse_bloc(list_lex list)
{
      list=analyse_declaration(list);
      list=analyse_corp(list);
      return list;
}
 
/****************** analys‚  -> var |‡ *************/
 
list_lex analyse_declaration(list_lex list)
{ symb=lire_symbol(list);
  if ((strcmp(symb.unit_l,"VAR"))!=0);
  else{ list=list->next; list=analyse_list_type(list);}
return list;
}
 
/* analys‚   -> :|:; */
 
list_lex analyse_list_type(list_lex list)
{list=analyse_list_id(list);
 symb=lire_symbol(list);
 if ((strcmp(symb.unit_l,":"))!=0){ft(symb.nligne_l);
err(symb.nligne_l);cprintf("Erreur: Manque ' : ' D'apr‚ ' %s ' Dans La Linge : ' %d '",symba.unit_l,symba.nligne_l );getchar();exit(-1);}
 else{list=list->next;
      list=analyse_type(list);
      symb=lire_symbol(list);
      if ((strcmp(symb.unit_l,";"))==0){list=list->next; list=analyse_list_type(list);}
      }
return list;
}
 
/*********** analys‚        -> id|id,  *******************/
 
list_lex analyse_list_id(list_lex list)
{symb=lire_symbol(list);
 if ((strcmp(symb.type_l,"ident"))!=0)
    {ft(symb.nligne_l);
    textbackground(0);window(2,8,2,19);textcolor(15);c  lrscr();
    gotoxy(1,symb.nligne_l);textcolor(4+BLINK);cprintf  ("*");
    textbackground(0);window(34,9,59,22);textcolor(15)  ;clrscr();
    textcolor(4+BLINK);cprintf("ERREUR : ");gotoxy(1,2);
    textcolor(3);cprintf("%s DIFFERENT A UN IDEN ",symb.unit_l,symb.nligne_l );
    getchar();exit(-1);}
 else{ if(rech_list(list_id,symb.unit_l)==0)
       {ft(symb.nligne_l);
err(symb.nligne_l);cprintf("Erreur Double Definition ' %s ' Dans La Linge : ' %d ' ",symb.unit_l,symb.nligne_l ); getchar();exit(-1);}
       else{list_id=insert(list_id,symb.unit_l,0,0,0);}
       list=list->next;symba=symb; symb=lire_symbol(list);
       if ((strcmp(symb.unit_l,","))==0)
       {list=list->next; list=analyse_list_id(list);}
      }
return list;
}
 
/******* analys‚         -> integer|array[const..const]of integer ****/
 
list_lex analyse_type(list_lex list)
{
 symb=lire_symbol(list);
 if ((strcmp(symb.unit_l,"INTEGER"))==0){list=list->next ;return list; }
 else{if((strcmp(symb.unit_l,"ARRAY"))!=0)
{ft(symb.nligne_l);err(symb.nligne_l);cprintf("Err eur Syntaxique Symbol '%s' Dans La Ligne '%d'",symb.unit_l,symb.nligne_l);
       getchar(); exit(-1);}
     else{list=list->next;symb=lire_symbol(list);
     if((strcmp(symb.unit_l,"["))!=0)
{ft(symb.nligne_l);err(symb.nligne_l);cprintf("Err eur Syntaxique Symbol '%s' Dans La Ligne '%d'",symb.unit_l,symb.nligne_l);
     getchar();  exit(-1);}
    else{list=list->next;symb=lire_symbol(list);
  if((strcmp(symb.type_l,"const"))!=0)
{ft(symb.nligne_l);err(symb.nligne_l);cprintf("Err eur Syntaxique Symbol '%s' Dans La Ligne '%d'",symb.unit_l,symb.nligne_l);
     getchar(); exit(-1); }
   else{list=list->next;symb=lire_symbol(list);
       if((strcmp(symb.unit_l,".."))!=0)
{ft(symb.nligne_l);err(symb.nligne_l);cprintf("Err eur Syntaxique Symbol '%s' Dans La Ligne '%d'",symb.unit_l,symb.nligne_l);
   getchar(); exit(-1); }
       else{list=list->next;symb=lire_symbol(list);
   if((strcmp(symb.type_l,"const"))!=0)
{ft(symb.nligne_l);err(symb.nligne_l);cprintf("Err eur Syntaxique Symbol '%s' Dans La Ligne '%d'",symb.unit_l,symb.nligne_l);
   getchar(); exit(-1); }
    else{list=list->next;symb=lire_symbol(list);
   if((strcmp(symb.unit_l,]"))!=0)
{ft(symb.nligne_l);err(symb.nligne_l);cprintf("Err eur Syntaxique Symbol '%s' Dans La Ligne '%d'",symb.unit_l,symb.nligne_l);
       getchar(); exit(-1);}
       else{list=list->next;symb=lire_symbol(list);
    if((strcmp(symb.unit_l,"OF"))!=0)
{ft(symb.nligne_l);err(symb.nligne_l);cprintf("Err eur Syntaxique Symbol '%s' Dans La Ligne '%d'",symb.unit_l,symb.nligne_l);
     getchar(); exit(-1); }
      else{ list=list->next;symb=lire_symbol(list);
   if((strcmp(symb.unit_l,"INTEGER"))!=0)
{ft(symb.nligne_l);err(symb.nligne_l);cprintf("Err eur Syntaxique Symbol '%s' Dans La Ligne '%d'",symb.unit_l,symb.nligne_l);
   getchar(); exit(-1); }
   else{}}}}}}}}}
return list->next;}
 
 
/******** analys‚    -> begin end ************************/
 
list_lex analyse_corp(list_lex list )
{
 symb=lire_symbol(list);
 if((strcmp(symb.unit_l,"BEGIN"))!=0)
   {ft(symb.nligne_l);err(symb.nligne_l);cprintf("Err  eur: Manque 'BEGIN' %d",symb.nligne_l);
    getchar(); exit(-1); }
 else{list=list->next;
      list=analyse_list_inst(list);
      symb=lire_symbol(list);
       if((strcmp(symb.unit_l,"END"))!=0)
    {ft(symb.nligne_l);
    textbackground(0);window(2,8,2,19);textcolor(15);c  lrscr();
    gotoxy(1,symb.nligne_l);textcolor(4+BLINK);cprintf  ("*");
    textbackground(0);window(34,9,59,22);textcolor(15)  ;clrscr();
    textcolor(4+BLINK);cprintf("ERREUR : ");gotoxy(1,2);textcolor(3);
    cprintf("MANQUE ';'");
     getchar(); exit(-1); }
       else{list=list->next;}
 
     }
return list;
}
 
/******** analys‚    -> |; ***************/
 
list_lex analyse_list_inst(list_lex list)
{
  list=analyse_inst(list);
  symb=lire_symbol(list);
  if((strcmp(symb.unit_l,";"))==0){list=list->next;
  list=analyse_list_inst(list);}
  return list;
}
 
/***      -> :=|ifthen|whiledo****/
 
list_lex analyse_inst(list_lex list)
{ symb=lire_symbol(list);
  if((strcmp(symb.unit_l,"IF"))==0)
  {list=list->next; list=analyse_exp(list);symb=lire_symbol(list);
       if((strcmp(symb.unit_l,"THEN"))==0){list=list->next;
       list=analyse_corp(list);}
       else {ft(symb.nligne_l);err(symb.nligne_l);cprintf("Err  eur: Manque 'THEN' Dans La Ligne '%d'",symb.nligne_l);
        getchar(); exit(-1); }}
  else{if((strcmp(symb.unit_l,"WHILE"))==0)
       {list=list->next; list=analyse_exp(list);symb=lire_symbol(list);
       if((strcmp(symb.unit_l,"DO"))==0){list=list->next;
       list=analyse_corp(list);}
       else {ft(symb.nligne_l);err(symb.nligne_l);cprintf("Err  eur: Manque 'DO' Dans La Ligne '%d'",symb.nligne_l);
        getchar(); exit(-1); }}
      else{ list=analyse_pgauche(list);
       symb=lire_symbol(list);
      if((strcmp(symb.unit_l,":="))==0){list=list->next;
      list=analyse_exp_simple(list);} //modifier
      else {ft(symb.nligne_l);err(symb.nligne_l);cprintf("Err  eur: Manque ':=' Dans La Ligne '%d'",symb.nligne_l);
       getchar(); exit(-1); }}
}
return list;
}
 
/******* analys‚    -> ****************/
 
list_lex analyse_exp(list_lex list)
{ list=analyse_exp_simple(list);
  list=analyse_relop(list);
  list=analyse_exp_simple(list);
  return list;
}
 
/******* analys‚  -> | *******/
       // ******* elimine la recursivit‚ ******
       //  ->
       //  -> |‡
 
list_lex analyse_exp_simple(list_lex list)//  ->
{list=analyse_terme(list);
 list=analyse_exp_simple_prime(list);
 return list;
}
 
list_lex analyse_exp_simple_prime(list_lex list) // -> |‡
{char *t[3]={"+","-","OR"};
 symb=lire_symbol(list);
 if((recherche(t,3,symb.unit_l))==0)
 {list=list->next;
  list=analyse_terme(list);
  list=analyse_exp_simple_prime(list);}
 return list;
}
 
/******* analys‚  -> | **************/
       // ******* elimine la recursivit‚ ******
       //  ->
       //  -> |‡
 
list_lex analyse_terme(list_lex list) //  ->
{list=analyse_facteur(list);
 list=analyse_terme_prime(list);
 return list;
}
 
list_lex analyse_terme_prime(list_lex list)//  -> |‡
{char *t[3]={"*","/","AND"};
 symb=lire_symbol(list);
 if((recherche(t,3,symb.unit_l))==0)
 {list=list->next;
  list=analyse_facteur(list);
  list=analyse_terme_prime(list);}
 return list;
}
 
/****** analyse -> not|()|const| ***************/
 
list_lex analyse_facteur(list_lex list)
{symb=lire_symbol(list);
 if((strcmp(symb.type_l,"const"))==0){list=list->next;}
 else{if((strcmp(symb.unit_l,"NOT"))==0)
   {list=list->next;list=analyse_exp(list);}
      else{if((strcmp(symb.unit_l,"("))==0)
        {list=list->next;list=analyse_exp(list);
          symb=lire_symbol(list);
          if((strcmp(symb.unit_l,")"))!=0)
       {ft(symb.nligne_l);err(symb.nligne_l);cprintf("Err  eur:Manque ')' Dans La Ligne '%d'",symb.nligne_l);
       getchar(); exit(-1); }
      else{list=list->next;}}
     else{ list=analyse_pgauche(list);}
     }
     }
return list;
}
 
/***********  analys‚ -> id|id[id]|id[const] **********************/
 
list_lex analyse_pgauche(list_lex list)
{symb=lire_symbol(list);
 if((strcmp(symb.type_l,"ident"))!=0)
    {ft(symb.nligne_l-1);
    textbackground(0);window(2,8,2,19);textcolor(15);c  lrscr();
    gotoxy(1,symb.nligne_l);textcolor(4+BLINK);cprintf  ("*");
    textbackground(0);window(34,9,59,22);textcolor(15)  ;clrscr();
    textcolor(4+BLINK);cprintf("ERREUR : ");gotoxy(1,2);
    textcolor(3);cprintf("PAS DE ';'");
    getchar();exit(-1);}
 else{if(rech_list(list_id,symb.unit_l)!=0){ft(symb  .nligne_l);
err(symb.nligne_l);cprintf("Erreur: Symbol Non Declar‚ ' %s ' Dans La Linge : ' %d ' ",symb.unit_l,symb.nligne_l ); getchar();exit(-1);}
      list=list->next;symb=lire_symbol(list);
      if((strcmp(symb.unit_l,"["))!=0);
      else{list=list->next;symb=lire_symbol(list);
      if(((strcmp(symb.type_l,"ident") )!=0)&&( (strcmp(symb.type_l,"const") )!=0))
{ft(symb.nligne_l);err(symb.nligne_l);cprintf("Err eur de type ' %s ' dans la ligne : ' %d ' ",symb.unit_l,symb.nligne_l );
        getchar();exit(-1);}
      else{if((strcmp(symb.type_l,"ident") )==0 && rech_list(list_id,symb.unit_l)!=0)
{ft(symb.nligne_l);err(symb.nligne_l);cprintf("Err eur: Symbol Non Declar‚ ' %s ' Dans La Ligne : ' %d ' ",symb.unit_l,symb.nligne_l ); getchar();exit(-1);}
      list=list->next;symb=lire_symbol(list);
      if((strcmp(symb.unit_l,"]"))!=0)
        {ft(symb.nligne_l);err(symb.nligne_l);cprintf("Err  eur: Manque ']' Dans La Ligne '%d'",symb.nligne_l);
        getchar(); exit(-1); }
      else{list=list->next;} } } }
return list;
}
 
/******************** analys‚ -> +|-|or   ***************************/
 
list_lex analyse_addop(list_lex list)
{char *t[3]={"+","-","OR"};
 symb=lire_symbol(list);
 if((recherche(t,3,symb.unit_l))!=0)
   {ft(symb.nligne_l);err(symb.nligne_l);cprintf("Err  eur: d'opeateur dans La Ligne : ' %d ' ",symb.nligne_l );
   getchar();exit(-1);}
 return list->next;
}
 
/******************** analys‚ -> *|/|and   ***************************/
 
list_lex analyse_mulop(list_lex list)
{char *t[3]={"*","/","AND"};
 symb=lire_symbol(list);
 if((recherche(t,3,symb.unit_l))!=0)
   {ft(symb.nligne_l);err(symb.nligne_l);cprintf("Err  eur d'op‚ateur dans La Ligne : ' %d ' ",symb.nligne_l );
   getchar();exit(-1);}
 return list->next;
}
 
/******************** analys‚ -> =|<>|>|>=|<|<=   ***************************/
 
list_lex analyse_relop(list_lex list)
{char *t[6]={"<>","<",">","<=",">=","="};
 symb=lire_symbol(list);
 if((recherche(t,6,symb.unit_l))!=0)
{ft(symb.nligne_l);
err(symb.nligne_l);cprintf("Erreur: Manque d'op‚rateur dans La Ligne : ' %d ' ",symb.nligne_l );
getchar();exit(-1);}
return list->next;
}
/*void dicsine_cadre(int xl,int yl ,int xc ,int yc,int color)
{int k;textcolor(color);
 if((xl>yl)||(xc>yc)){printf("Erreur de dessin cadre");getchar();exit(-1);}
 gotoxy(xc,xl);cprintf("É");gotoxy(yc,xl);cprintf("  »");
 gotoxy(xc,yl);cprintf("È");gotoxy(yc,yl);cprintf("  ¼");
 for (k=xc+1; k!=yc; k++){gotoxy(k,xl);cprintf("Í");}
 for (k=xc+1; k!=yc; k++){gotoxy(k,yl);cprintf("Í");}
 for (k=xl+1; k!=yl; k++){gotoxy(xc,k);cprintf("º");}
 for (k=xl+1; k!=yl; k++){gotoxy(yc,k);cprintf("º");}
}
 */
/*void dicsine_cadre1(int xl,int yl ,int xc ,int yc,int color)
{int j,k;textcolor(color);
 if((xl>yl)||(xc>yc)){printf("Erreur de dessin de cadre");getchar();exit(-1);}
 j=xl;
 do{
 for (k=xc+1; k!=yc; k++){gotoxy(k,j);cprintf("Û");}j++;
 }while(j!=yl );
} */
 
 
void pkey(char x)
{
switch(x)
{
case 'c':exit(-1);
}
}
 
/*.................................................  ...........*/
void page()
{
textbackground(0);window(1,1,80,25);textcolor(15);  clrscr();
textbackground(15);window(1,1,80,4);textcolor(15);  clrscr();
 
textcolor(4);gotoxy(3,4);cprintf("QUATRIEM ANNEE INFORMATIQUE TP COMPILATION ...          MINI COMPILATEUR");
textbackground(1);window(3,2,78,3);textcolor(15);c  lrscr();
gotoxy(25,1);printf("UNIVERSITE DE JIJEL");
gotoxy(22,2);printf("DEPARTEMENT D'INFORMATIQUE");
textbackground(15);window(63,6,80,11);textcolor(15  );clrscr();
textbackground(0);window(64,7,79,10);textcolor(15)  ;clrscr();
gotoxy(2,1);printf("jihad");
 
textbackground(1);window(1,6,61,24);textcolor(15);  clrscr();
textbackground(0);window(2,7,60,23);textcolor(15);  clrscr();
textcolor(2);gotoxy(3,2);cprintf("la premier interface de mon compilateur");
textcolor(2);gotoxy(3,3);cprintf("donner le nom de fichier qui contient");
textcolor(2);gotoxy(3,4);cprintf("le code source pour compiler ....");
textcolor(14);gotoxy(15,10);cprintf("NOM : ");
textcolor(10);gotoxy(21,10);cprintf("_ _ _ _ _ _ _ _ _");
textcolor(10);gotoxy(21,10);
}
/*.......................PROGRAMME PRINCIPALE...............................*/
void main()
{
 
clrscr();
page();
gotoxy(24,35);
list_lexical=analyse_lexical();
afficher(list_lexical);getchar();clrscr();
analyse_prgm(list_lexical);
getchar();
}



crazyinf

  • Newbie
  • *
    • مشاركة: 7
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #4 في: تشرين الثاني 05, 2009, 06:55:30 مسائاً
Bonsoir
Avec quel langage tu as programmer ? sous quel environnement(Delphi, c++ Builder, Qt,etc, ....) ?
Finalement, as tu un compte-rendu qui récapitule toute la démarche suivie?  
Merci de votre coopération et de votre patience
Cordialement


LYEES

  • Newbie
  • *
    • مشاركة: 25
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #5 في: كانون الأول 02, 2009, 09:35:29 مسائاً
السلام عليكم مشكوور اخي على المبادرة  انا فعلا احتاج الى tp من النوع الذي اقترحته  انت  وياليتك  ترفعه  في اقرب وقت    لاني محتاجه  في مادة compilation  وجازاك الله خيرا  وبارك فبك


midos147

  • Newbie
  • *
    • مشاركة: 17
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #6 في: كانون الأول 19, 2009, 06:07:42 مسائاً
salam.
moi je vuex faire un mini compilateur en turbo pascal c mon tp de ce semestre
c klk1 peut m'aider svp
merci


midos147

  • Newbie
  • *
    • مشاركة: 17
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #7 في: كانون الأول 19, 2009, 06:23:41 مسائاً
السلام عليكم
أنا جد محتاجة إلى tp في مادة compilation بلغة pascal
و قد وجدت صعوبة في إنجازه لكثرة البحوث و المشاريع المبرمجة
فهلا ساعدتموني جزاكم الله خيرا
tp هو mini compilateur  بلغة turbo pascal
أنا في إنتظار ردودكم التي أرجو أن تكون في أقرب وقت


نرمين*

  • Global Moderator
  • Hero Member
  • *****
    • مشاركة: 3989
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #8 في: كانون الأول 20, 2009, 06:41:19 مسائاً
انا عندي بلغة السي  



midos147

  • Newbie
  • *
    • مشاركة: 17
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #9 في: كانون الأول 21, 2009, 08:46:12 مسائاً
أرجو المساعدة من طرف الصديقة نرمين .
mini compilateur en pascal


نرمين*

  • Global Moderator
  • Hero Member
  • *****
    • مشاركة: 3989
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #10 في: كانون الأول 22, 2009, 02:57:40 مسائاً
كما قلت لك سابقا اخي
عندي بلغة السي لا املكه بالباسكال



LYEES

  • Newbie
  • *
    • مشاركة: 25
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #11 في: كانون الأول 24, 2009, 01:02:05 مسائاً
السلام عليكم ورحمة الله وبركاته

انا في امس الحاجة الى tp de comilation de lex et yacc en   c


من فضلك ان امكن في اسرع وقت وجازاك الله خيرا


EPCILONE

  • Newbie
  • *
    • مشاركة: 25
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #12 في: كانون الأول 25, 2009, 07:21:47 صباحاً
salut svp vue q tu t'attend les reponses ,moi je suis l'un des plus interressant de ce tp d'ailleurs ils nous a donné 1 tp de ce genre j'ai essyé de prendre vtre tp ma ça n'a rien avoir :sadwalk:


نرمين*

  • Global Moderator
  • Hero Member
  • *****
    • مشاركة: 3989
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #13 في: كانون الأول 25, 2009, 11:14:29 صباحاً
هذا هو tp
كاملا
ارجوا ان تستفيدوا




نرمين*

  • Global Moderator
  • Hero Member
  • *****
    • مشاركة: 3989
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #14 في: كانون الأول 25, 2009, 08:38:30 مسائاً
من لديه اي استفسارات يتفضل