Salut !
J'essaye de faire un mini compilateur d'un langage personnel, j'ai fais le flex et la grammaire en bison et j'insère dans une table de hachage, tout marche bien a pars un petit quelque chose, il me fait une erreur syntaxique pour le true
voici mon code
flex :
bison:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134 %{ #include "biz.tab.h" int yylineo=1; int col=1; extern YYSTYPE yylval; #include "ts1.h" %} /*mot clé*/ blancs [ \t]+ lettre [A-Za-z] minlettre [a-z] chiffre [1-9] chiff0 [0-9] entier [+-]?{chiffre}{chiff0}* idf {minlettre}({minlettre}|chiff0)+ reel [+-]?{entier}+("."{chiff0}{chiffre}*)? chaine {cote}+(.)*{cote}+ commentaire "$"(.)* cote \" etoile \* plus \+ moins \- CODE (C)(O)(D)(E) NAME (N)(A)(M)(E) DATA (D)(A)(T)(A) TYPE (T)(Y)(P)(E) SIZE (S)(I)(Z)(E) INTEGER (I)(N)(T) REAL (R)(E)(A)(L) BOOL (B)(O)(O)(L) CHAR (C)(H)(A)(R) CONST (C)(O)(N)(S)(T) AFF (A)(F)(F) INST (I)(N)(S)(T) INPUT (I)(N)(P)(U)(T) OUTPUT (O)(U)(T)(P)(U)(T) CHECK (C)(H)(E)(C)(K) OTHERWISE (O)(T)(H)(E)(R)(W)(I)(S)(E) CONDITION (C)(O)(N)(D)(I)(T)(I)(O)(N) INSTCHECK (I)(N)(S)(T)(C)(H)(E)(C)(K) LOOP (L)(O)(O)(P) INSTLOOP (I)(N)(S)(T)(L)(O)(O)(P) AND (A)(N)(D) GT (G)(T) GE (G)(E) EQ (E)(Q) NE (N)(E) LE (L)(E) LT (L)(T) OR (O)(R) TRUE (T)(R)(U)(E) FALSE (F)(A)(L)(S)(E) %% {entier} {if((atoi(yytext)<= 32767) && (atoi(yytext)>= -32768) ) { yylval=(YYSTYPE)strdup(yytext); recherche (yytext,"entier",atoi(yytext),0);return(INTEGER);} else {printf("Error: entier trop long");} } {reel} {{if((yyleng<=15)) {yylval=(YYSTYPE)strdup(yytext); recherche (yytext,"reel",atof(yytext),0); return REAL;}else{printf("Error: reel trop long");}}} {CODE} {yylval=(YYSTYPE)strdup(yytext); col=col+strlen(yytext); recherche (yytext,"mot clé",0,1); return mc_CODE ;} {NAME} {yylval=(YYSTYPE)strdup(yytext); recherche (yytext,"mot clé",0,1); return mc_NAME ;col=col+strlen(yytext);} {commentaire} {printf("On ignore le commentaire");} {DATA} {yylval=(YYSTYPE)strdup(yytext); recherche (yytext,"mot clé",0,1); return mc_DATA ;col=col+strlen(yytext);} {TYPE} { yylval=(YYSTYPE)strdup(yytext); recherche (yytext,"mot clé",0,1); return mc_TYPE ;col=col+strlen(yytext);} {SIZE} {yylval=(YYSTYPE)strdup(yytext);recherche (yytext,"mot clé",0,1); return mc_SIZE ;col=col+strlen(yytext);} {INTEGER} { yylval=(YYSTYPE)strdup(yytext);recherche (yytext,"mot clé",0,1); return mc_INTEGER; col=col+strlen(yytext);} {REAL} { yylval=(YYSTYPE)strdup(yytext); recherche (yytext,"mot clé",0,1);return mc_REAL; col=col+strlen(yytext);} {BOOL} {yylval=(YYSTYPE)strdup(yytext);recherche (yytext,"mot clé",0,1); return mc_BOOL ;col=col+strlen(yytext);} {CHAR} {yylval=(YYSTYPE)strdup(yytext);recherche (yytext,"mot clé",0,1); return mc_CHAR ;col=col+strlen(yytext);} {CONST} {yylval=(YYSTYPE)strdup(yytext); recherche (yytext,"mot clé",0,1);return mc_CONST ;col=col+strlen(yytext);} {AFF} {yylval=(YYSTYPE)strdup(yytext);recherche (yytext,"mot clé",0,1); return mc_AFF ;col=col+strlen(yytext);} {INST} {yylval=(YYSTYPE)strdup(yytext); recherche (yytext,"mot clé",0,1);return mc_INST ; col=col+strlen(yytext);} {OUTPUT} {yylval=(YYSTYPE)strdup(yytext);recherche (yytext,"mot clée",0,1);return mc_OUTPUT ; col=col+strlen(yytext);} {INSTCHECK} {yylval=(YYSTYPE)strdup(yytext);recherche (yytext,"mot clé",0,1); return mc_INSTCHECK;col=col+strlen(yytext);} {CHECK} {yylval=(YYSTYPE)strdup(yytext);recherche (yytext,"mot clé",0,1); return mc_CHECK ;col=col+strlen(yytext);} {OTHERWISE} {yylval=(YYSTYPE)strdup(yytext);recherche (yytext,"mot clé",0,1); return mc_OTHERWISE ;col=col+strlen(yytext);} {LOOP} {yylval=(YYSTYPE)strdup(yytext);recherche (yytext,"mot clé",0,1); return mc_LOOP;col=col+strlen(yytext);} {INSTLOOP} {yylval=(YYSTYPE)strdup(yytext);recherche (yytext,"mot clé",0,1);return mc_INSTLOOP;col=col+strlen(yytext);} {INPUT} {yylval=(YYSTYPE)strdup(yytext);recherche (yytext,"mot clée",0,1); return mc_INPUT ; col=col+strlen(yytext);} {CONDITION} {yylval=(YYSTYPE)strdup(yytext);recherche (yytext,"mot clé",0,1); return mc_CONDITION;col=col+strlen(yytext);} {chaine} {yylval=(YYSTYPE)strdup(yytext); recherche (yytext,"IDF",0,0);return CHAINE ; col=col+strlen(yytext);} {cote} {yylval=(YYSTYPE)strdup(yytext); recherche (yytext,"SEP",0,2); return COTE;} {AND} {yylval=(YYSTYPE)strdup(yytext); recherche (yytext,"mot clé",0,1); return AND;} {OR} {yylval=(YYSTYPE)strdup(yytext); recherche (yytext,"mot clé",0,1);return OR;} ">" {yylval=(YYSTYPE)strdup(yytext); recherche (yytext,"SEP",0,2);return SUP;} {GT} {yylval=(YYSTYPE)strdup(yytext); recherche (yytext,"mot clé",0,1);return SUP;} ">=" {yylval=(YYSTYPE)strdup(yytext); recherche (yytext,"SEP",0,2);return SUPEGAL;} {GE} {yylval=(YYSTYPE)strdup(yytext); recherche (yytext,"mot clé",0,1);return SUPEGAL;} "<" {yylval=(YYSTYPE)strdup(yytext); recherche (yytext,"SEP",0,2);return INF;} {LT} {yylval=(YYSTYPE)strdup(yytext);recherche (yytext,"mot clé",0,1); return INF;} "<=" {yylval=(YYSTYPE)strdup(yytext); recherche (yytext,"SEP",0,2);return INFEGL;} {LE} {yylval=(YYSTYPE)strdup(yytext); recherche (yytext,"mot clé",0,1);return INFEGL;} "==" {yylval=(YYSTYPE)strdup(yytext);recherche (yytext,"SEP",0,2);return EQL;} {EQ} {yylval=(YYSTYPE)strdup(yytext);recherche (yytext,"mot clé",0,1);return EQL;} "!=" {yylval=(YYSTYPE)strdup(yytext);recherche (yytext,"SEP",0,2);return NEQL;} {NE} {yylval=(YYSTYPE)strdup(yytext);recherche (yytext,"mot clé",0,1);return NEQL;} "#" {yylval=(YYSTYPE)strdup(yytext); recherche (yytext,"SEP",0,2);return yytext[0];} ":" {yylval=(YYSTYPE)strdup(yytext); recherche (yytext,"SEP",0,2); return yytext[0];} "/" {yylval=(YYSTYPE)strdup(yytext);recherche (yytext,"SEP",0,2);return DIV;} "." {yylval=(YYSTYPE)strdup(yytext); recherche (yytext,"SEP",0,2);return yytext[0];} "::" {yylval=(YYSTYPE)strdup(yytext); recherche (yytext,"SEP",0,2);return AFC;} {FALSE} {yylval=(YYSTYPE)strdup(yytext); recherche (yytext,"mot clé",0,1);return FALSE;} {TRUE} {yylval=(YYSTYPE)strdup(yytext); recherche (yytext,"mot clé",0,1);return TRUE;} "," {yylval=(YYSTYPE)strdup(yytext); recherche (yytext,"SEP",0,2); return yytext[0];} {etoile} {yylval=(YYSTYPE)strdup(yytext);recherche (yytext,"SEP",0,2);return ETOILE;} {plus} {yylval=(YYSTYPE)strdup(yytext);recherche (yytext,"SEP",0,2);return ADD;} {moins} {yylval=(YYSTYPE)strdup(yytext);recherche (yytext,"SEP",0,2);return SOUS;} "]" {yylval=(YYSTYPE)strdup(yytext);recherche (yytext,"SEP",0,2);return CROCHFERM;} "[" {yylval=(YYSTYPE)strdup(yytext);recherche (yytext,"SEP",0,2);return CROCHOUV;} "(" {yylval=(YYSTYPE)strdup(yytext);recherche (yytext,"SEP",0,2);return PAROUV;} ")" {yylval=(YYSTYPE)strdup(yytext);recherche (yytext,"SEP",0,2);return PARFER;} [\t ] ; [\n] ; {idf} {if(yyleng<=10) {printf("entité:%s\n",yytext); yylval=(YYSTYPE)strdup(yytext);recherche (yytext,"IDF",0,0); return IDF;} else printf("error : idf long\n"); } {lettre} {printf("entité:%s\n",yytext); yylval=(YYSTYPE)strdup(yytext); recherche (yytext,"IDF",0,0);return CH;} . {printf("\033[0;33m erreur lexical: lingne %d; colone : %d; entite %s \n", yylineo, col, yytext); col=col+strlen(yytext); }
ma table de symbole
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158 %token mc_INTEGER mc_REAL mc_BOOL mc_CHAR mc_DATA mc_CONST mc_TYPE mc_SIZE mc_CODE mc_NAME INTEGER IDF mc_AFF mc_INPUT mc_OUTPUT CH %token mc_INST AFC REAL COTE CROCHOUV CROCHFERM CHAINE TRUE FALSE SUP INF SUPEGAL INFEGL EQL NEQL AND OR %token mc_CHECK mc_OTHERWISE mc_CONDITION mc_INSTCHECK mc_INSTLOOP mc_LOOP %token PAROUV PARFER SOUS ADD DIV OPR %left OR AND %left SUP SUPEGAL EQL NEQL INFEGL INF %left ADD SOUS %left ETOILE DIV %right mc_OTHERWISE %% /**********Debut du progrm*********************/ S:INF mc_CODE '#' mc_NAME ':' IDF SUP LIST_INST_DEC INF DIV mc_CODE SUP {printf("CODE OK");} ; LIST_INST_DEC: LIST_INST_DEC LIST_INST| LIST_INST_DEC DEC | DEC |LIST_INST ; /*****************DEC****************/ DEC:DEC_V|DEC_T|DEC_C|DEC_CONST ; DEC_V:INF mc_DATA '#' mc_TYPE ':' TYP SUP LIST_DEC_VAR INF DIV mc_DATA SUP {printf("DECL OK");} ; DEC_T:INF mc_DATA '#' mc_TYPE ':' TYP SUP LIST_DEC_TAB INF DIV mc_DATA SUP {printf("DECL OK");} ; DEC_C:INF mc_DATA '#' mc_TYPE ':' mc_CHAR SUP LIST_DEC_CHAR INF DIV mc_DATA SUP {printf("DECL OK");} ; DEC_CONST:INF mc_DATA '#' mc_TYPE ':' mc_CONST SUP LIST_DEC_VAR INF DIV mc_DATA SUP {printf("DECL OK");} ; /*************AFF************/ LIST_INST: INST_OUTPUT|INST_INPUT|INST_AFF|INST_CHECK|INST_LOOP ; INST_AFF:INF mc_INST '#' mc_TYPE ':' mc_AFF SUP LIST_DEC_VAR INF DIV mc_INST SUP {printf("INSTRCT OK");} ; /*******************EXPRESSION****************/ TYP: mc_INTEGER|mc_REAL|mc_BOOL ; LIST_DEC_BOUL: EXP_AFF|EXP_AFF ',' LIST_DEC_BOUL ; EXPRESSION : LIST_DEC_BOUL ; EXP_AFF:AFF_CHAINE|AFF_TAB|EXP_CALCUL|AF|AFF_BOOL ; /*************AFF chaine de car**************/ AFF_CHAINE: IDF AFC CHAINE ; /**************AFF TAB****************/ AFF_TAB: TAB AFC EXP_AFF ; TAB:IDF CROCHOUV INDICE CROCHFERM ; INDICE :IDF|INTEGER ; AF:CHAINE|INTEGER|REAL|IDF|BOOLN ; /**AFF BOOL**/ AFF_BOOL:IDF AFC BOOLN ; BOOLN :TRUE | FALSE ; /****AFF OPERATION HOHOHOHOHO******/ EXP_CALCUL: IDF AFC COTE_DROIT ; COTE_DROIT: EXP_MULT | COTE_DROIT ADD EXP_MULT | COTE_DROIT SOUS EXP_MULT ; EXP_MULT: VAR| EXP_MULT ETOILE VAR | EXP_MULT DIV VAR ; VAR: REAL|INTEGER|TAB|IDF| PAROUV COTE_DROIT PARFER ; /****************FIN EXPRESSION********************/ /***********LISTE DES PARAMETRES de declaration***********/ LIST_DEC_VAR: EXPRESSION|VARIETE|LIST_DEC_VAR ',' EXPRESSION|LIST_DEC_VAR ',' LIST_DEC_TAB|LIST_DEC_VAR ',' VARIETE|LIST_DEC_CONST ',' LIST_DEC_CHAR ; VARIETE: LIST_DEC_CONST |LIST_DEC_TAB ',' LIST_DEC_CHAR|LIST_DEC_TAB ','LIST_DEC_CONST ; LIST_DEC_TAB:IDF mc_SIZE INTEGER ; LIST_DEC_CHAR : IDF ETOILE INTEGER|LIST_DEC_TAB|AFF_CHAINE|LIST_DEC_CHAR ',' LIST_DEC_CHAR ; LIST_DEC_CONST: IDF AFC mc_CHAR|IDF AFC AF|LIST_DEC_CONST ',' LIST_DEC_CONST ; INPUTINST:TAB|EXPRESSION INPUTINST|LIST_DEC_VAR ',' TAB| TAB ',' INPUTINST|LIST_DEC_VAR|IDF ',' INPUTINST ; /******************ENTREES && SORTIE******************/ INST_INPUT:INF mc_INST '#' mc_TYPE ':' mc_INPUT SUP INPUTINST INF DIV mc_INST SUP {printf("OK decl Instrct");} ; INST_OUTPUT:INF mc_INST '#' mc_TYPE ':' mc_OUTPUT SUP AFFICHAGE INF DIV mc_INST SUP {printf("OK decl Instrct");} ; AFFICHAGE: ADDIDF|CHAINE|IDF |IDFADD IDFADD IDF ; ADDIDF:AFFICHAGE ADD IDFADD CHAINE ADD IDF| IDFADD CHAINE|IDFADD CHAINE ADD IDFADD CHAINE ADD IDF ; IDFADD:IDF ADD ; /********************FIN ENTRéES SORTIE********************/ /******************** CONDITION IF************************/ INST_CHECK:INF mc_INST '#' mc_TYPE ':' mc_CHECK SUP LIST_INST_DEC INF mc_OTHERWISE SUP LIST_INST_DEC INF DIV mc_OTHERWISE SUP COND INF DIV mc_INSTCHECK SUP|INF mc_INST '#' mc_TYPE ':' mc_CHECK SUP COND INF DIV mc_INSTCHECK SUP|INF mc_INST '#' mc_TYPE ':' mc_CHECK SUP LIST_INST_DEC COND INF DIV mc_INSTCHECK SUP {printf("OK CHECK Instrct");} ; INSTCOND:GENERAL| GENERAL ANDOR GENERAL| PAROUV OP1 PARFER '.' EXPLOGIQUE '.' PAROUV OP2 PARFER|OP1 '.' PAROUV EXPLOGIQUE PARFER '.' OP2| PAROUV OP1 PARFER '.' ANDOR '.' PAROUV OP2 PARFER|PAROUV OP1 '.' ANDOR '.' OP2 PARFER ; OP1 : IDF|TAB ; OP2:REAL|INTEGER|BOOLN|OP1 ; EXPLOGIQUE:SUP|SUPEGAL|EQL|NEQL|INFEGL|INF ; ANDOR:AND|OR ; COND:INF mc_CONDITION SUP INSTCOND INF DIV mc_CONDITION SUP| COND INF mc_CONDITION SUP OP2 INF DIV mc_CONDITION SUP|INF mc_CONDITION SUP PLUSIEURS ; PLUSIEURS : INSTCOND COND INF DIV mc_CONDITION SUP| VAR INF DIV mc_CONDITION SUP ; GENERAL:PAROUV OP1 '.' EXPLOGIQUE '.' OP2 PARFER ; /***************FIN du CHECK*************************/ /*********************************** ******************************** ************************** ***********************************/ /*************DEBUT du LOOP***************/ INST_LOOP: BALIZ_LOOP LIST_INST_DEC COND LOOP_FIN {printf("OK LOOP Instrct");} ; BALIZ_LOOP:INF mc_INST '#' mc_TYPE ':' mc_LOOP SUP ; LOOP_FIN: INF DIV mc_INSTLOOP SUP ; %% main() {yyparse(); afficher(); }
et voici l'erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256 #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <windows.h> void Color(int couleurDuTexte,int couleurDeFond) // fonction d'affichage de couleurs { HANDLE H = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(H,couleurDeFond*16+couleurDuTexte); } /* 0 : Noir 1 : Bleu foncé 2 : Vert foncé 3 : Turquoise 4 : Rouge foncé 5 : Violet 6 : Vert caca d'oie 7 : Gris clair 8 : Gris foncé 9 : Bleu fluo 10 : Vert fluo 11 : Turquoise 12 : Rouge fluo 13 : Violet 2 14 : Jaune 15 : Blanc */ typedef struct { int state; char name[20]; char type[20]; float val; } element; //pour table de idf et de constant typedef struct { int state; char name[20]; char type[20]; } elt; // pour table des mot cles et un aute pour les séparateur element tab[1000][1000]; elt tabs[40][40],tabm[40][40]; /****************************************************** initialisation de l'état des cases des tables des symbloles 0: libre 1:occupée ******************************************************/ void initialisation() { int i,j; for (i=0;i<1000;i++) for (j=0;j<1000;j++) { tab[i][j].state=0;} for (i=0;i<40;i++) for (j=0;j<40;j++) {tabs[i][j].state=0; tabm[i][j].state=0;} } //fin initialitation /************************* insertion des entititées lexicales dans les tables des symboles *******************************/ void inserer (char entite[], char type[],float val,int i,int j,int y) { printf("%s\n",entite); switch (y) { case 0:/*insertion dans la table des IDF et CONST*/ tab[i][j].state=1; strcpy(tab[i][j].name,entite); strcpy(tab[i][j].type,type); tab[i][j].val=val; break; case 1:/*insertion dans la table des mots clés*/ tabm[i][j].state=1; strcpy(tabm[i][j].name,entite); strcpy(tabm[i][j].type,type); break; case 2:/*insertion dans la table des séparateurs*/ tabs[i][j].state=1; strcpy(tabs[i][j].name,entite); strcpy(tabs[i][j].type,type); break; } //fin switch } //fin insertion /**************************chercher si l'entité existe dèja dans la table*************************************/ void recherche (char entite[], char type[],float val,int y) { int valeur=0; int k,j=0,i; for (k=0;k<strlen(entite);k++) valeur=valeur+entite[k]; switch(y) { case 0:/*verifier si la case dans la tables des IDF et CONST est libre*/ i=(((123*valeur)+139)%173)%1000; if(tab[i][j].state==0) {inserer(entite,type,val,i,j,y); } else { while((tab[i][j].state==1)&&(strcmp(tab[i][j].name,entite)!=0) && (j<1000)) {j++;} if(strcmp(tab[i][j].name,entite)==0) { // on sort de la boucle : cause la condition strcmp(tab[i][j].name,entite)!=0 donc l'entite exist printf("entité existe déjà\n"); } else if(j<1000) { inserer(entite,type,val,i,j,y); } else { printf("il y a des entités qui n'ont pas été inserer augmenter votre nombre de colonne \n"); } } break; case 1:/*verifier si la case dans la tables des mots clés est libre*/ i=(((3*valeur)+17)%37)%40; if(tabm[i][j].state==0) {inserer(entite,type,val,i,j,y); } else { while ((tabm[i][j].state==1) && (strcmp(tabm[i][j].name,entite)!=0) && (j<40 )) {j++;} if(strcmp(tabm[i][j].name,entite)==0) { // on sort de la boucle: cause la condition strcmp(tab[i][j].name,entite)==0 donc l'entite exist printf("entité existe déjà\n"); } else if(j<40) { inserer(entite,type,val,i,j,y); } else { printf("il y a des entités qui n'ont pas été inserer augmenter votre nombre de colonne \n"); } } break; case 2:/*verifier si la case dans la tables des séparateurs est libre*/ i=(((7*valeur)+17)%37)%40; if(tabs[i][j].state==0) {inserer(entite,type,val,i,j,y); } else { while((tabs[i][j].state==1) &&( strcmp(tabs[i][j].name,entite)!=0 )&& (j<40 )) {j++;} if(strcmp(tabs[i][j].name,entite)==0) { // sorté la boucle cause la condition strcmp(tab[i][j].name,entite)!=0 donc l'entite exist printf("entité existe déjà\n"); } else if(j<40) { inserer(entite,type,val,i,j,y); } else { printf("il y a des entités qui n'ont pas été inserer augmenter votre nombre de colonne \n"); } } break; } //fin switch } //fin recharche /****************affichage*******************/ void afficher() /* 0 : Noir 1 : Bleu foncé 2 : Vert foncé 3 : Turquoise 4 : Rouge foncé 5 : Violet 6 : Vert caca d'oie 7 : Gris clair 8 : Gris foncé 9 : Bleu fluo 10 : Vert fluo 11 : Turquoise 12 : Rouge fluo 13 : Violet 2 14 : Jaune 15 : Blanc */ {int i,j; Color(12,5); printf("/***************Table des symboles IDF et des CONST*************/\n"); printf("______________________________________________________________________\n\n"); printf("Case\t\t\t Name \t\t\t Type\t\t Valeur\n"); printf("------------------------------------------------------------------------------- \n"); for(i=0;i<1000;i++) { j=0; while (j<1000 && tab[i][j].state==1) { printf("|%d %d \t|%30s \t|%8s",i,j,tab[i][j].name,tab[i][j].type); // printf("case: %d %d \n",i,j); // printf("Entité: %s ",tab[i][j].name); // printf("Type: %s ",tab[i][j].type); if((strcmp(tab[i][j].type,"reel")==0)||(strcmp(tab[i][j].type,"entier")==0)) // pour les constantes printf("\t|%8f\n",tab[i][j].val); else printf("\n"); j++; } //fin while } //fin for printf("\n/***************Table des symboles mots clés*************/\n\n"); printf("Case\t\t\tName \t\t\t\tType \n"); printf("---------------------------------------------------------------------------- \n"); for(i=0;i<40;i++) { j=0; while (j<40 && tabm[i][j].state==1) { printf("|%d %d \t\t|%17s \t|%10s\n",i,j,tabm[i][j].name,tabm[i][j].type); //printf("case: %d %d \n",i,j); //printf("Entité: %s ",tabm[i][j].name); //printf("Type:%s\n\n",tabm[i][j].type); j++; } //fin while } //fin for printf("\n/***************Table des symboles séparateurs*************/\n\n"); printf("Case\t\t\tName \t\t\t\tType \n"); printf("--------------------------------------------------------------------------- \n"); for(i=0;i<40;i++) {j=0; while (j<40 && tabs[i][j].state==1) { printf("|%d %d \t\t|%17s \t|%10s\n",i,j,tabs[i][j].name,tabs[i][j].type); //printf("case: %d %d \n",i,j); //printf("Entité: %s ",tabs[i][j].name); //printf("Type: %s\n\n",tabs[i][j].type); j++; } //fin while } //fin for } //fin affichage /*affichage en couleur*/
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2TRUE syntaxe error
Partager