Compilateur symtaxique c

nike -  
kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   -
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();
}
Configuration: Windows XP
Internet Explorer 6.0

7 réponses

  1. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    je vx au plus vite possible le compilateur syntaxique pr se programe c suivant qui est un compilateur

    Sinon...?
    0
  2. nike
     
    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
  3. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    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
  4. nike
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526
     
    Ben j'ai jamais fait d'analyseur syntaxique alors je peux pas trop t'aider....
    0
  7. nike
     
    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