Objectif
L'objectif de cette article est implémente un automate en langage C qui permit de reconnu les identificateur a partir d'fichier et affiche les erreurs et leurs emplacement.
Alors on va crée le automate :
tell que
R1={A......Z,a........z,_}et R2={0..........9}
voila le fichier qui content les identificateur,qui sont si-pare par {;}.
nom de fichier est date.txt
Télécharge ici
Code source de programme:
///Author: Karara Mohamed @ tutodev1.blogspot.com/
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include<string.h>
#define maX 256
int TR[2][maX];
FILE *tamp;
void remplireAutomate(){
int i,j;
for(i=0;i<2;i++){
for(j=0;j<255;j++){
TR[i][j]=-1;
}
}
///pour a ....z
for(j=0;j<2;j++){
for(i=97;i<=122;i++){
TR[j][i]=1;
}}
///pour A .......Z
for(j=0;j<2;j++){
for(i=65;i<=90;i++){
TR[j][i]=1;
}}
///pour 0 ...........9
for(i=48;i<=57;i++){
TR[1][i]=1;
}
///pour _
TR[1][95]=1;
}
///AUTOMATE
int AFD(char *TM,int ptdeb,int ptfin) {
int e=0,r;
char s=TM[ptdeb];
while((TR[e][(int)(s)]!=-1)&&(ptdeb<ptfin-1)){
r=(int)(s);
e=TR[e][r];
ptdeb++;
s=TM[ptdeb];
}
r=(int)(s);
e=TR[e][r];
if((e==1)){return 1;}
return 0;
}
void verification(char *m,int l){
int ptdeb=0,ptfin=0,j,i,n=strlen(m);
for( ptfin=0; ptfin<n;ptfin++){
if(m[ptfin]==';'){
if(AFD(m,ptdeb,ptfin)==1){
printf("<<");for(i=ptdeb;i<ptfin;i++){printf("%c",m[i]);} puts(">>");printf(" identificateur reconnu\n");}
else { printf("<<");for(i=ptdeb;i<ptfin;i++){printf("%c",m[i]);}puts(">>"); printf(" identificateur non roconnu dans la line %d\n",l);}
ptfin++;ptdeb=ptfin;
}
}
}
///charger le fichier
void charger(char *m){
int i=1;
tamp=fopen("data.txt","r");
while ( (fgets(m, 250, tamp))!= NULL){
verification(m,i);///verification identificateur par identificateur
i++;///nombre de lines
}
}
int main()
{
char TM[maX];
remplireAutomate();
int choix;
do { system("cls");
printf("\t\t\t================MENU================\n\n");
printf("\t\t\t1-lire les identificateur dans le fichier\n");
printf("\t\t\t2-QUIT\n");
printf("\t\t\t");
scanf("%d",&choix);
switch(choix){
case 1:system("cls");charger(TM);system("pause>null");break;
case 2:system("cls"); printf("\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tBYEEEEEEEEEE\n\n\n\n"); system("pause>null");break;
default:
system("cls");
printf("\t\t\t Erreur de choix !!!!!!!!!!!!!!!!!! \n");
Sleep(1500); system("cls");
}
}while(choix!=2);
return 0;
}
POUR TÉLÉCHARGE LE CODE SOURCE