Compilateur symtaxique c

Fermé
nike - 29 janv. 2009 à 22:56
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 29 janv. 2009 à 23:22
Bonjour,
je vx au plus vite possible le compilateur syntaxique pr se programe c suivant qui est un compilateur lexical :
#include <stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
typedef struct
{
char *type;
int ind;
} unite;
unite resultat[50];
int nbid,nblex,k;
char *id[50];
char *key[10];
char sep[5];
char *lex,*req;
int test(char u)
{
if((u>='a')&&(u<='z')) return 1;
if((u>='0')&&(u<='9')) return 2;
if((u==',')||(u==';')||(u=='(')||(u==')')) return 3;
if((u==' ')) return 4;
}
int iskey(char *u)
{
int i;
for(i=0;i<3;i++)
if(strcmp(u,key[i])==0) return i;
return -1;
}
char *add(char *s1,char c)
{
char *s=(char *)malloc(10* sizeof(char));
sprintf(s,"%s%c",s1,c);
return s;
}
int isid(char *u)
{
int i;
for(i=0;i<nbid;i++)
if(strcmp(u,id[i])==0) return i;
return -1;
}
int issep(char u)
{
int i;
for(i=0;i<3;i++)
if(u==sep[i]) return i;
return -1;
}
void main()
{
clrscr();
key[0]="create";
key[1]="table";
key[2]="select";
sep[0]='(';
sep[1]=')';
sep[2]=',';
gets(req);
k=0;
nbid=0;
nblex=0;
while(k<strlen(req))
{
switch(test(req[k]))
{
case 1:lex="";
while((test(req[k])==1)||(test(req[k])==2)) {lex=add(lex,req[k]);k++;}
k--;
printf("%s \n",lex);
if(iskey(lex)>=0)
{
resultat[nblex].type="key";
resultat[nblex].ind=iskey(lex);
nblex++;
}
else if(isid(lex)>=0)
{
resultat[nblex].type="id";
resultat[nblex].ind=isid(lex);
nblex++;
}
else
{
id[nbid]=lex;
resultat[nblex].type="id";
resultat[nblex].ind=nbid;
nbid++;
nblex++;
}
break;
case 2: lex="";
while(test(req[k])==2) {lex=add(lex,req[k]);k++;}
k--;
printf("%s\n",lex);
resultat[nblex].type="const";
resultat[nblex].ind=-1;
nblex++;
break;
case 3:
printf("%c\n",req[k]);
resultat[nblex].type="sep";
resultat[nblex].ind=issep(req[k]);
nblex++;
break;
case 4:printf("space\n");
break;
default: printf("erreur");
}
k++;
}
for(int h=0;h<nblex;h++) printf("%s: %d\n",resultat[h].type,resultat[h].ind);
getch();
}
A voir également:

7 réponses

kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
29 janv. 2009 à 22:59
je vx au plus vite possible le compilateur syntaxique pr se programe c suivant qui est un compilateur

Sinon...?
0
je vx un programme c pr un compilateur syntaxique ,parceque j'ai programmé le compilateur lexical suivant et je vx le syntaxique au plus vite possible et merci ,le programme du compilateur lexical et le suivant :
#include <stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
typedef struct
{
char *type;
int ind;
} unite;
unite resultat[50];
int nbid,nblex,k;
char *id[50];
char *key[10];
char sep[5];
char *lex,*req;
int test(char u)
{
if((u>='a')&&(u<='z')) return 1;
if((u>='0')&&(u<='9')) return 2;
if((u==',')||(u==';')||(u=='(')||(u==')')) return 3;
if((u==' ')) return 4;
}
int iskey(char *u)
{
int i;
for(i=0;i<3;i++)
if(strcmp(u,key[i])==0) return i;
return -1;
}
char *add(char *s1,char c)
{
char *s=(char *)malloc(10* sizeof(char));
sprintf(s,"%s%c",s1,c);
return s;
}
int isid(char *u)
{
int i;
for(i=0;i<nbid;i++)
if(strcmp(u,id[i])==0) return i;
return -1;
}
int issep(char u)
{
int i;
for(i=0;i<3;i++)
if(u==sep[i]) return i;
return -1;
}
void main()
{
clrscr();
key[0]="create";
key[1]="table";
key[2]="select";
sep[0]='(';
sep[1]=')';
sep[2]=',';
gets(req);
k=0;
nbid=0;
nblex=0;
while(k<strlen(req))
{
switch(test(req[k]))
{
case 1:lex="";
while((test(req[k])==1)||(test(req[k])==2)) {lex=add(lex,req[k]);k++;}
k--;
printf("%s \n",lex);
if(iskey(lex)>=0)
{
resultat[nblex].type="key";
resultat[nblex].ind=iskey(lex);
nblex++;
}
else if(isid(lex)>=0)
{
resultat[nblex].type="id";
resultat[nblex].ind=isid(lex);
nblex++;
}
else
{
id[nbid]=lex;
resultat[nblex].type="id";
resultat[nblex].ind=nbid;
nbid++;
nblex++;
}
break;
case 2: lex="";
while(test(req[k])==2) {lex=add(lex,req[k]);k++;}
k--;
printf("%s\n",lex);
resultat[nblex].type="const";
resultat[nblex].ind=-1;
nblex++;
break;
case 3:
printf("%c\n",req[k]);
resultat[nblex].type="sep";
resultat[nblex].ind=issep(req[k]);
nblex++;
break;
case 4:printf("space\n");
break;
default: printf("erreur");
}
k++;
}
for(int h=0;h<nblex;h++) printf("%s: %d\n",resultat[h].type,resultat[h].ind);
getch();
}
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
29 janv. 2009 à 23:07
Je ne comprends pas bien. Tu veux quoi en fait, du code Sql ou? Parce qu'apparemment c'est un analyseur syntaxique pour du Sql...
0
oui exactement c pour le sql,mais un programme écris en language C comme j'ai programmé moi, si tu me comprend pas passe moi ton adresse msn pour te parlé diréctement, parceque c'est vraiment urgent et merci bcp bcp bcp ...
0

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

Posez votre question
svp c'est trés urgent
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
29 janv. 2009 à 23:15
Ben j'ai jamais fait d'analyseur syntaxique alors je peux pas trop t'aider....
0
méme avec un programme similaire a celui que j'ai programmé ,vous pouvez pas m'aider !!,vous etes le seul qui peux m'aider,alors svp,donne moi juste se que tu trouve,svp,et merci bcp
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
29 janv. 2009 à 23:22
0