منتدى الإعلام الآلي يشمل دروس، تمارين وحلول

إضافة رد
قديم 27-07-2009, 08:12 AM
  #1
نرمين*
مشرفة منتدى
الرياضيات والإعلام الآلي
 الصورة الرمزية نرمين*
 
La spécialité: Autres
اخرى ( جامعة عربية او اجنبية )
تاريخ التسجيل: 08-11-2008
الدولة: الجزائر
المشاركات: 3,989
نرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداع
افتراضي


اولا هده هي grammmiare الي رايحين نعمل عليها
nalyse syntaxique par methode descente recursive *********/

// ************ la grammaire utils‚ dans l'analyse syntaxique *********

// <prgm> -> program id;<bloc>
// <bloc> -> <declaration><corp>
// <declaration> -> var <list-type>|‡
// <list-type> -> <list-id>:<type>|<list-type>:<type>;<list-type>
// <list-id> -> id|id,<list-id>
// <type> -> integer|array[const..const]of integer
// <corp> -> begin <list-inst> end
// <list-inst> -> <inst>|<inst>;<list-inst>
// <inst> -> <pgauche>:=<exp>|if<exp>then<c orp>|while<exp>do<co rp>
// <exp> -> <exp-simple><relop><exp-simple>
// <exp-simple> -> <terme>|<exp-simple><addop><terme>
// <terme> -> <facteur>|<terme><mulop><factu er>
// <facteur> -> not<exp>|(<exp>)|const|<pgauch e>
// <pgauche> -> id|id[id]|id[const]
// <addop> -> +|-|or
// <mulop> -> *|/|and
// <relop> -> =|<>|>|>=|<|<=



التعديل الأخير تم بواسطة نرمين* ; 07-01-2010 الساعة 08:46 PM
نرمين* غير متواجد حالياً  
رد مع اقتباس
قديم 27-07-2009, 11:18 PM
  #2
نرمين*
مشرفة منتدى
الرياضيات والإعلام الآلي
 الصورة الرمزية نرمين*
 
La spécialité: Autres
اخرى ( جامعة عربية او اجنبية )
تاريخ التسجيل: 08-11-2008
الدولة: الجزائر
المشاركات: 3,989
نرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداع
افتراضي رد: demi compilateur

اولا la declaration


#include <string.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

/********************* 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]) && (i++<n-1) );
if(i==n) return (x);// si x est un caractŠre majuscule
else return (t2[i]);// 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[i])!=0) && (i++<n-1) );
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[i])!=0 ) && (i++<n-1) );
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",*t pu2="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(stru ct 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+BLI NK);cprintf("*");
textbackground(0);window(34,9, 59,22);textcolor(15) ;clrscr();
textcolor(4+BLINK);cprintf("ER REUR : ");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);cpri ntf(" ANALYSE LEXICAL");
gotoxy(1,3);textcolor(12);cpri ntf(" PREMIER PARTIE");
gotoxy(1,4);textcolor(12+BLINK );cprintf("......... ......");
textbackground(1);window(1,6,6 1,24);textcolor(15); clrscr();
gotoxy(3,1);cprintf("unit");go toxy(12,1);cprintf(" type");gotoxy(22,1);cprintf("t aille");gotoxy(32,1) ;cprintf("ligne");gotoxy(42,1) ;cprintf("suivant");
textbackground(0);window(2,7,6 0,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,6 0,23);textcolor(3);c lrscr(); }
*/ }
temp=temp->next;
}
temp=temp1;
int fl=1;
for (int y=0; y<zz-1; 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,6 0,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",tem p->type_l);
gotoxy(22,fl);cprintf("%d",tem p->taile_l);
gotoxy(32,fl);cprintf("%d",tem p->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);cpri ntf("DEUXIEME PARTIE");
gotoxy(1,3);textcolor(12);cpri ntf("ANALYSE SYNTHAX");
gotoxy(1,4);textcolor(12+BLINK );cprintf("......... ......");
textbackground(1);window(1,6,6 1,24);textcolor(15); clrscr();
textbackground(0);window(2,7,6 0,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);
}



__________________
رباهـ قد عشت في دنياي مغتربا ,, ويلاهـ إن أغترب في العالمـ الثاني
أسـتـغـفـر الله مــن كفران نعمته ,, بل فوق ما أستحق
الله أعطاني
ألمـ يجدني أخا غي فأرشدني ,, وهائما غير ذي مأوى فأواني
ألمـ يجدني أخا جهل فعلمني ,, وعائلا غير ذي وجد فأغناني
لبيكـ ملئ فمي ،، يارب يارب من قلبي ووجداني








التعديل الأخير تم بواسطة نرمين* ; 07-01-2010 الساعة 08:51 PM
نرمين* غير متواجد حالياً  
رد مع اقتباس
قديم 27-10-2009, 07:47 PM
  #3
crazyinf
 
La spécialité: sciences d'information & communication
جامعة عمار ثليجي الأغواط
تاريخ التسجيل: 17-10-2009
المشاركات: 7
crazyinf عضو يستحق التميز
افتراضي رد: demi compilateur

Bonjour
Le lien ne marche pas
Autre chose, le demi compilateur de quel langage ?
Cordialement



التعديل الأخير تم بواسطة crazyinf ; 27-10-2009 الساعة 07:54 PM
crazyinf غير متواجد حالياً  
رد مع اقتباس
قديم 05-11-2009, 07:29 AM
  #4
نرمين*
مشرفة منتدى
الرياضيات والإعلام الآلي
 الصورة الرمزية نرمين*
 
La spécialité: Autres
اخرى ( جامعة عربية او اجنبية )
تاريخ التسجيل: 08-11-2008
الدولة: الجزائر
المشاركات: 3,989
نرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداع
افتراضي رد: demi compilateur

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","INTEGE R","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);cpri ntf("NOM DE FICHIER");
gotoxy(2,3);textcolor(10);cpri ntf("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_l ex,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("DEPACEMEN T 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,s trlen(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(strcm p(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;co mp=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‚ <prgm> -> program id;<bloc> *************/


void analyse_prgm(list_lex list)
{char *fin="#";
list=insert(list,fin,3,1,nblig ne);
symb=lire_symbol(list);list=li st->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,sy mb.unit_l,0,0,0);
symb=lire_symbol(list);list=li st->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_b loc(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‚ <bloc> -> <declaration><corp> ***********/

list_lex analyse_bloc(list_lex list)
{
list=analyse_declaration(list) ;
list=analyse_corp(list);
return list;
}

/****************** analys‚ <declaration> -> var <list-type>|‡ *************/

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-type> -> <list-id>:<type>|<list-type>:<type>;<list-type> */

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("Er reur: Manque ' : ' D'apr‚ ' %s ' Dans La Linge : ' %d '",symba.unit_l,symba.nlign e_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‚ <list-id> -> id|id,<list-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);textco lor(4+BLINK);cprintf ("*");
textbackground(0);window(34,9, 59,22);textcolor(15) ;clrscr();
textcolor(4+BLINK);cprintf("ER REUR : ");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("Er reur Double Definition ' %s ' Dans La Linge : ' %d ' ",symb.unit_l,symb.nligne_ l ); getchar();exit(-1);}
else{list_id=insert(list_id,sy mb.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‚ <type> -> 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,"A RRAY"))!=0)
{ft(symb.nligne_l);err(symb.nl igne_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.nl igne_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.nl igne_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.nl igne_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.nl igne_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.nl igne_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.nl igne_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,"INTEGE R"))!=0)
{ft(symb.nligne_l);err(symb.nl igne_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‚ <corp> -> begin <list-inst> 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.nl igne_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);textco lor(4+BLINK);cprintf ("*");
textbackground(0);window(34,9, 59,22);textcolor(15) ;clrscr();
textcolor(4+BLINK);cprintf("ER REUR : ");gotoxy(1,2);textcolor(3 );
cprintf("MANQUE ';'");
getchar(); exit(-1); }
else{list=list->next;}

}
return list;
}

/******** analys‚ <list-inst> -> <inst>|<inst>;<list-inst> ***************/

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;
}

/*** <inst> -> <pgauche>:=<exp>|if<exp>then<c orp>|while<exp>do<co rp>****/

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=li re_symbol(list);
if((strcmp(symb.unit_l,"THEN") )==0){list=list->next;
list=analyse_corp(list);}
else {ft(symb.nligne_l);err(symb.nl igne_l);cprintf("Err eur: Manque 'THEN' Dans La Ligne '%d'",symb.nligne_l);
getchar(); exit(-1); }}
else{if((strcmp(symb.unit_l,"W HILE"))==0)
{list=list->next; list=analyse_exp(list);symb=li re_symbol(list);
if((strcmp(symb.unit_l,"DO"))= =0){list=list->next;
list=analyse_corp(list);}
else {ft(symb.nligne_l);err(symb.nl igne_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.nl igne_l);cprintf("Err eur: Manque ':=' Dans La Ligne '%d'",symb.nligne_l);
getchar(); exit(-1); }}
}
return list;
}

/******* analys‚ <exp> -> <exp-simple><relop><exp-simple> ****************/

list_lex analyse_exp(list_lex list)
{ list=analyse_exp_simple(list);
list=analyse_relop(list);
list=analyse_exp_simple(list);
return list;
}

/******* analys‚ <exp-simple> -> <terme>|<exp-simple><addop><terme> *******/
// ******* elimine la recursivit‚ ******
// <exp-simple> -> <terme><exp-simple_prime>
// <exp-simple_prime> -> <addop><terme><exp-simple_prime>|‡

list_lex analyse_exp_simple(list_lex list)//<exp-simple> -> <terme><exp-simple_prime>
{list=analyse_terme(list);
list=analyse_exp_simple_prime( list);
return list;
}

list_lex analyse_exp_simple_prime(list_ lex list) //<exp-simple_prime> -> <addop><terme><exp-simple_prime>|‡
{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‚ <terme> -> <facteur>|<terme><mulop><factu er> **************/
// ******* elimine la recursivit‚ ******
// <terme> -> <facteur><terme_prime>
// <terme_prime> -> <mulop><facteur><terme_prime>| ‡

list_lex analyse_terme(list_lex list) // <terme> -> <facteur><terme_prime>
{list=analyse_facteur(list);
list=analyse_terme_prime(list) ;
return list;
}

list_lex analyse_terme_prime(list_lex list)// <terme_prime> -> <mulop><facteur><terme_prime>| ‡
{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 <facteur> -> not<exp>|(<exp>)|const|<pgauch e> ***************/

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,"N OT"))==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.nl igne_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‚ <pgauche> -> 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);textco lor(4+BLINK);cprintf ("*");
textbackground(0);window(34,9, 59,22);textcolor(15) ;clrscr();
textcolor(4+BLINK);cprintf("ER REUR : ");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("Er reur: 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.nl igne_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,"i dent") )==0 && rech_list(list_id,symb.unit_l) !=0)
{ft(symb.nligne_l);err(symb.nl igne_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.nl igne_l);cprintf("Err eur: Manque ']' Dans La Ligne '%d'",symb.nligne_l);
getchar(); exit(-1); }
else{list=list->next;} } } }
return list;
}

/******************** analys‚ <addop> -> +|-|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.nl igne_l);cprintf("Err eur: d'opeateur dans La Ligne : ' %d ' ",symb.nligne_l );
getchar();exit(-1);}
return list->next;
}

/******************** analys‚ <mulop> -> *|/|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.nl igne_l);cprintf("Err eur d'op‚ateur dans La Ligne : ' %d ' ",symb.nligne_l );
getchar();exit(-1);}
return list->next;
}

/******************** analys‚ <relop> -> =|<>|>|>=|<|<= ***************************/

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("Er reur: 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("E rreur de dessin cadre");getchar();exit(-1);}
gotoxy(xc,xl);cprintf("&#201;" );gotoxy(yc,xl);cprintf(" »");
gotoxy(xc,yl);cprintf("&#200;" );gotoxy(yc,yl);cprintf(" ¼");
for (k=xc+1; k!=yc; k++){gotoxy(k,xl);cprintf("&#2 05;");}
for (k=xc+1; k!=yc; k++){gotoxy(k,yl);cprintf("&#2 05;");}
for (k=xl+1; k!=yl; k++){gotoxy(xc,k);cprintf("&#1 86;");}
for (k=xl+1; k!=yl; k++){gotoxy(yc,k);cprintf("&#1 86;");}
}
*/
/*void dicsine_cadre1(int xl,int yl ,int xc ,int yc,int color)
{int j,k;textcolor(color);
if((xl>yl)||(xc>yc)){printf("E rreur de dessin de cadre");getchar();exit(-1);}
j=xl;
do{
for (k=xc+1; k!=yc; k++){gotoxy(k,j);cprintf("&#21 9;");}j++;
}while(j!=yl );
} */


void pkey(char x)
{
switch(x)
{
case 'c':exit(-1);
}
}

/*............................. .................... ...........*/
void page()
{
textbackground(0);window(1,1,8 0,25);textcolor(15); clrscr();
textbackground(15);window(1,1, 80,4);textcolor(15); clrscr();

textcolor(4);gotoxy(3,4);cprin tf("QUATRIEM ANNEE INFORMATIQUE TP COMPILATION ... MINI COMPILATEUR");
textbackground(1);window(3,2,7 8,3);textcolor(15);c lrscr();
gotoxy(25,1);printf("UNIVERSIT E DE JIJEL");
gotoxy(22,2);printf("DEPARTEME NT 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,6 1,24);textcolor(15); clrscr();
textbackground(0);window(2,7,6 0,23);textcolor(15); clrscr();
textcolor(2);gotoxy(3,2);cprin tf("la premier interface de mon compilateur");
textcolor(2);gotoxy(3,3);cprin tf("donner le nom de fichier qui contient");
textcolor(2);gotoxy(3,4);cprin tf("le code source pour compiler ....");
textcolor(14);gotoxy(15,10);cp rintf("NOM : ");
textcolor(10);gotoxy(21,10);cp rintf("_ _ _ _ _ _ _ _ _");
textcolor(10);gotoxy(21,10);
}
/*.......................PROGRA MME PRINCIPALE.................... ...........*/
void main()
{

clrscr();
page();
gotoxy(24,35);
list_lexical=analyse_lexical() ;
afficher(list_lexical);getchar ();clrscr();
analyse_prgm(list_lexical);
getchar();
}

__________________
رباهـ قد عشت في دنياي مغتربا ,, ويلاهـ إن أغترب في العالمـ الثاني
أسـتـغـفـر الله مــن كفران نعمته ,, بل فوق ما أستحق
الله أعطاني
ألمـ يجدني أخا غي فأرشدني ,, وهائما غير ذي مأوى فأواني
ألمـ يجدني أخا جهل فعلمني ,, وعائلا غير ذي وجد فأغناني
لبيكـ ملئ فمي ،، يارب يارب من قلبي ووجداني








التعديل الأخير تم بواسطة نرمين* ; 07-01-2010 الساعة 08:54 PM
نرمين* غير متواجد حالياً  
رد مع اقتباس
قديم 05-11-2009, 07:55 PM
  #5
crazyinf
 
La spécialité: sciences d'information & communication
جامعة عمار ثليجي الأغواط
تاريخ التسجيل: 17-10-2009
المشاركات: 7
crazyinf عضو يستحق التميز
افتراضي رد: demi compilateur

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

التعديل الأخير تم بواسطة crazyinf ; 05-11-2009 الساعة 08:13 PM
crazyinf غير متواجد حالياً  
رد مع اقتباس
قديم 02-12-2009, 10:35 PM
  #6
LYEES
 
La spécialité: sciences d'information & communication
جامعة حسيبة بن بوعلي شلف
تاريخ التسجيل: 14-10-2009
المشاركات: 25
LYEES عضو يستحق التميز
افتراضي رد: demi compilateur

السلام عليكم مشكوور اخي على المبادرة انا فعلا احتاج الى tp من النوع الذي اقترحته انت وياليتك ترفعه في اقرب وقت لاني محتاجه في مادة compilation وجازاك الله خيرا وبارك فبك
LYEES غير متواجد حالياً  
رد مع اقتباس
قديم 19-12-2009, 07:07 PM
  #7
midos147
 
تاريخ التسجيل: 31-12-2007
المشاركات: 17
midos147 عضو يستحق التميز
افتراضي رد: demi compilateur

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 غير متواجد حالياً  
رد مع اقتباس
قديم 19-12-2009, 07:23 PM
  #8
midos147
 
تاريخ التسجيل: 31-12-2007
المشاركات: 17
midos147 عضو يستحق التميز
افتراضي رد: demi compilateur

السلام عليكم
أنا جد محتاجة إلى tp في مادة compilation بلغة pascal
و قد وجدت صعوبة في إنجازه لكثرة البحوث و المشاريع المبرمجة
فهلا ساعدتموني جزاكم الله خيرا
tp هو mini compilateur بلغة turbo pascal
أنا في إنتظار ردودكم التي أرجو أن تكون في أقرب وقت
midos147 غير متواجد حالياً  
رد مع اقتباس
قديم 20-12-2009, 07:41 PM
  #9
نرمين*
مشرفة منتدى
الرياضيات والإعلام الآلي
 الصورة الرمزية نرمين*
 
La spécialité: Autres
اخرى ( جامعة عربية او اجنبية )
تاريخ التسجيل: 08-11-2008
الدولة: الجزائر
المشاركات: 3,989
نرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداعنرمين* عضو محترف الابداع
افتراضي رد: demi compilateur

انا عندي بلغة السي

__________________
رباهـ قد عشت في دنياي مغتربا ,, ويلاهـ إن أغترب في العالمـ الثاني
أسـتـغـفـر الله مــن كفران نعمته ,, بل فوق ما أستحق
الله أعطاني
ألمـ يجدني أخا غي فأرشدني ,, وهائما غير ذي مأوى فأواني
ألمـ يجدني أخا جهل فعلمني ,, وعائلا غير ذي وجد فأغناني
لبيكـ ملئ فمي ،، يارب يارب من قلبي ووجداني







نرمين* غير متواجد حالياً  
رد مع اقتباس
قديم 21-12-2009, 09:46 PM
  #10
midos147
 
تاريخ التسجيل: 31-12-2007
المشاركات: 17
midos147 عضو يستحق التميز
افتراضي رد: demi compilateur

أرجو المساعدة من طرف الصديقة نرمين .
mini compilateur en pascal
midos147 غير متواجد حالياً  
رد مع اقتباس
إضافة رد

الكلمات الدلالية (Tags)
compilateur, demi

أدوات الموضوع
انواع عرض الموضوع

تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة

الانتقال السريع

المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
مادة compilateur mimik منتدى الإعلام الآلي 6 20-02-2010 07:46 PM
aidez moi svp compilateur !!! EPCILONE قسم الإستفسارات و الطّلبات 5 28-12-2009 11:30 PM
برمجة compilateur lala_ing الإعــلام الآلي والرياضيــات 11 05-02-2009 06:54 PM
Compilateur de Pascal achraf.mouni الإعــلام الآلي والرياضيــات 6 28-01-2009 10:03 AM
compilateur achraf.mouni الإعــلام الآلي والرياضيــات 6 23-01-2009 09:06 PM


الساعة الآن 12:26 PM.