analyse lexicale: ranger l'identifiant
salut
je suis entrain de développer un analyseur lexical en C: qui évalue une expression arithmétique et renvoie une liste chainée des identifiants, opérateur arithmètique et opérateur relationel, opérateur affectation.
Pour le moment je suis entrain de travailler sur la fonction fonction RangerId() qui a accès au tampon où l’unité lexicale identificateur a été localisée, examine la table des symboles et si on trouve le lexème avec l’identificateur mot clé, RangerId() rend 0. Si on trouve le lexème comme variable du programme, RangerId() rend un pointeur vers une entrée dans la table des symboles. Si on ne trouve pas le lexème dans la table des symboles, il y est placé en tant que variable et un pointeur vers cette nouvelle entrée est retourné.
je n'arrive pas a faire l'étape de recherche dans la table de symbole avec les condition si trouver sinon, voilà le code, pouvez vous m'aider?
Merci
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| char tab_motclé[20]= { "début","fin","program","var","entier","réel" };
typedef struct element element;
struct element
{
int val;
char nom;
struct element *nxt;
};
typedef element* liste;
element* ID = NULL ;
*element rangerid(char mot)
{
int x, k, i,j;
char expr[20];
char carac;
int val;
char nom;
FILE* fichier = NULL;// =NULL;
fichier=fopen("C:\\mes documents \\fichier.txt","r"); {
caractereActuel = fgetc(fichier); // On initialise caractereActuel
// Boucle de lecture des caractères un à un
while (caractereActuel != EOF) // On continue tant que fgetc n'a pas retourné EOF (fin de fichier)
{
printf("%c", caractereActuel); // On affiche le caractère stocké dans caractereActuel
caractereActuel = fgetc(fichier); // On lit le caractère suivant
}
fclose(fichier);
}
if (fichier!=NULL)
{
carac=fgetc(fichier);
while (carac != EOF)
i++;
expr[i]=carac;
if((carac!=' ')||(carac!='\n')||(carac!='\t')||(carac!=':')||(carac!=';'))
{
for (k=0;k<20;k++)
{
if ( strcmp(expr[j],tab_motclé[k])==0)
return 0 ;
}
else () // chercher le caractère dans la table de symbole et si il le trouve rangerid() rend un pointeur vers une entrée
printf(" il s'agit d' un identifiant");
else //sinon si ni mot clé ni variable programme alors créer une nouvelle entrée et renvoie un pointeur vers cette entrée
}
} |