-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlexicalProjet.l
247 lines (210 loc) · 7.77 KB
/
lexicalProjet.l
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
%{
#include "syntaxiqueProjet.tab.h"
#include "ts.h"
extern nb_ligne;
extern Col;
extern YYSTYPE yylval;
%}
lettre [a-zA-Z]
chiffre [0-9]
IDF [A-Z]({lettre}|{chiffre}|[_])*
cst_int [-+]?{chiffre}+
cst_char ({lettre}|{chiffre})
cst_string \"[^\"]*\"
cst_real [+-]?{chiffre}+\.{chiffre}+
commentaire "/*"([^*]|\*+[^*/])*\*+"/"
%%
Programme { rechercher(yytext,"Mot cle"," ",0,1);
printf("L'entite lexicale reconnue est %s \n", yytext);
Col= Col + strlen(yytext);
return mc_programme;}
PROCESS { yylval.string=strdup(yytext);
rechercher(yytext,"Mot cle"," ",0,1);
printf("L'entite lexicale reconnue est %s \n", yytext);
Col= Col + strlen(yytext);
return mc_process;}
LOOP { yylval.string=strdup(yytext);
rechercher(yytext,"Mot cle"," ",0, 1);
printf("L'entite lexicale reconnue est %s \n", yytext);
Col= Col + strlen(yytext);
return mc_loop;}
ARRAY { yylval.string=strdup(yytext);
rechercher(yytext,"Mot cle"," ",0, 1);
printf("L'entite lexicale reconnue est %s \n", yytext);
Col= Col + strlen(yytext);
return mc_array;}
VAR {
rechercher(yytext,"Mot cle"," ",0, 1);
printf("L'entite lexicale reconnue est %s \n", yytext);
Col= Col + strlen(yytext);
return mc_var;}
CONST { printf("L'entite lexicale reconnue est %s \n", yytext);
rechercher(yytext,"Mot cle"," ",0, 1);
Col= Col + strlen(yytext);
return mc_const;}
REAL { printf("L'entite lexicale reconnue est %s \n", yytext);
rechercher(yytext,"Mot cle"," ",0, 1);
Col= Col + strlen(yytext);
return mc_real;}
CHAR { printf("L'entite lexicale reconnue est %s \n", yytext);
rechercher(yytext,"Mot cle"," ",0, 1);
Col= Col + strlen(yytext);
return mc_char;}
STRING { printf("L'entite lexicale reconnue est %s \n", yytext);
rechercher(yytext,"Mot cle"," ",0, 1);
Col= Col + strlen(yytext);
return mc_string;}
INTEGER { printf("L'entite lexicale reconnue est %s \n", yytext);
rechercher(yytext,"Mot cle"," ",0, 1);
Col= Col + strlen(yytext);
return mc_integer;}
READ {printf("L'entite lexicale reconnue est %s \n", yytext);
rechercher(yytext,"Mot cle"," ",0, 1);
Col= Col + strlen(yytext);
return mc_read;}
WRITE { printf("L'entite lexicale reconnue est %s \n", yytext);
rechercher(yytext,"Mot cle"," ",0, 1);
Col= Col + strlen(yytext);
return mc_write;}
While { printf("L'entite lexicale reconnue est %s \n", yytext);
rechercher(yytext,"Mot cle"," ",0, 1);
Col= Col + strlen(yytext);
return mc_while;}
INF { printf("L'entite lexicale reconnue est %s \n", yytext);
rechercher(yytext,"Mot cle"," ",0, 1);
Col= Col + strlen(yytext);
return mc_inf;}
SUP { printf("L'entite lexicale reconnue est %s \n", yytext);
rechercher(yytext,"Mot cle"," ",0, 1);
Col= Col + strlen(yytext);
return mc_sup;}
EG { printf("L'entite lexicale reconnue est %s \n", yytext);
rechercher(yytext,"Mot cle"," ",0, 1);
Col= Col + strlen(yytext);
return mc_eg;}
INFE { printf("L'entite lexicale reconnue est %s \n", yytext);
rechercher(yytext,"Mot cle"," ",0, 1);
Col= Col + strlen(yytext);
return mc_infe;}
SUPE { printf("L'entite lexicale reconnue est %s \n", yytext);
rechercher(yytext,"Mot cle"," ",0, 1);
Col= Col + strlen(yytext);
return mc_supe;}
DIFF { printf("L'entite lexicale reconnue est %s \n", yytext);
rechercher(yytext,"Mot cle"," ",0, 1);
Col= Col + strlen(yytext);
return mc_diff;}
EXECUT { printf("L'entite lexicale reconnue est %s \n", yytext);
rechercher(yytext,"Mot cle"," ",0, 1);
Col= Col + strlen(yytext);
return mc_exec;}
IF { printf("L'entite lexicale reconnue est %s \n", yytext);
rechercher(yytext,"Mot cle"," ",0, 1);
Col= Col + strlen(yytext);
return mc_if;}
END_IF { printf("L'entite lexicale reconnue est %s \n", yytext);
rechercher(yytext,"Mot cle"," ",0, 1);
Col= Col + strlen(yytext);
return mc_end_if;}
ELSE { printf("L'entite lexicale reconnue est %s \n", yytext);
rechercher(yytext,"Mot cle"," ",0, 1);
Col= Col + strlen(yytext);
return mc_else;}
{IDF} { printf("L'entite lexicale reconnue est %s \n", yytext);
yylval.string=strdup(yytext);
rechercher(yytext,"IDF"," ",0,0);
Col= Col + strlen(yytext);
if (yyleng>10) printf ("\n Erreur Lexicale: IDF trop longue a la ligne %d a la colonne %d \n\n ",nb_ligne, Col);
return idf;}
{cst_int} { printf("L'entite lexicale reconnue est %s \n", yytext);
yylval.entier=atoi(yytext);
rechercher(yytext,"CONSTANT","INTEGER",atof(yytext),0);
Col= Col + strlen(yytext);
return cst_int;}
{cst_char} { printf("L'entite lexicale reconnue est %s \n", yytext);
yylval.character=yytext[0];
rechercher(yytext,"CONSTANT","CHAR",atof(yytext),0);
Col= Col + strlen(yytext);
return cst_char;}
{cst_real} { printf("L'entite lexicale reconnue est %s \n", yytext);
yylval.real=atof(yytext);
rechercher(yytext,"CONSTANT","REAL",atof(yytext),0);
Col= Col + strlen(yytext);
return cst_real;}
{cst_string} { printf("L'entite lexicale reconnue est %s \n", yytext);
yylval.string=strdup(yytext);
rechercher(yytext,"CONSTANT","STRING",atof(yytext),0);
Col= Col + strlen(yytext);
return cst_string;}
{commentaire} { printf("L'entite lexicale est reconnue comme commentaire \n");
char* str = yytext;
char *ptrChar=strchr(str,'\n'); // ptrChar un pointeur vers le caractere '\n' de la variable str
while (ptrChar!=NULL) {
nb_ligne++;
ptrChar=strchr(ptrChar+1,'\n');
}}
"#" {Col= Col + strlen(yytext);
rechercher(yytext,"Separateur",0,0,2);
return htag;}
"##" {Col= Col + strlen(yytext);
rechercher(yytext,"Separateur",0,0,2);
return dble_htag;}
"$" {Col= Col + strlen(yytext);
rechercher(yytext,"Separateur",0,0,2);
return dollar;}
"::" {Col= Col + strlen(yytext);
rechercher(yytext,"Separateur",0,0,2);
return dble_point;}
":=" {Col= Col + strlen(yytext);
rechercher(yytext,"Separateur",0,0,2);
return aff;}
"[" {Col= Col + strlen(yytext);
rechercher(yytext,"Separateur",0,0,2);
return crochet_ovr;}
"]" {Col= Col + strlen(yytext);
rechercher(yytext,"Separateur",0,0,2);
return crochet_frm;}
"/" {Col= Col + strlen(yytext);
rechercher(yytext,"Separateur",0,0,2);
return slash;}
"//" {Col= Col + strlen(yytext);
rechercher(yytext,"Separateur",0,0,2);
return separateur;}
"+" {Col= Col + strlen(yytext);
rechercher(yytext,"Separateur",0,0,2);
return plus;}
"-" {Col= Col + strlen(yytext);
rechercher(yytext,"Separateur",0,0,2);
return moins;}
"=" {Col= Col + strlen(yytext);
rechercher(yytext,"Separateur",0,0,2);
return egal;}
"*" {Col= Col + strlen(yytext);
rechercher(yytext,"Separateur",0,0,2);
return etoile;}
\' {Col= Col + strlen(yytext);
rechercher(yytext,"Separateur",0,0,2);
return cote;}
"|" {Col= Col + strlen(yytext);
rechercher(yytext,"Separateur",0,0,2);
return barre;}
"@" {Col= Col + strlen(yytext);
rechercher(yytext,"Separateur",0,0,2);
return arobase;}
"(" {Col= Col + strlen(yytext);
rechercher(yytext,"Separateur",0,0,2);
return parnths_ovr;}
")" {Col= Col + strlen(yytext);
rechercher(yytext,"Separateur",0,0,2);
return parnths_frm;}
"{" {Col= Col + strlen(yytext);
rechercher(yytext,"Separateur",0,0,2);
return acolad_ovr;}
"}" {Col= Col + strlen(yytext);
rechercher(yytext,"Separateur",0,0,2);
return acolad_frm;}
[ \t] Col= Col + strlen(yytext);
\n {Col= 1; nb_ligne++;}
. {printf ("\n Entité lexicale non reconnue a ligne %d a la colonne %d \n\n",
nb_ligne, Col);}
%%