forked from toful/LexicalAnalyzer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
FALexicalAnalyzer.l
63 lines (60 loc) · 1.4 KB
/
FALexicalAnalyzer.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
%{
int i;
int estat = 0;
int num_estats;
int simbol = 0;
%}
alfabeto [Aa][Ll][Ff][Aa][Bb][Ee][Tt][Oo]
estados [Ee][Ss][Tt][Aa][Dd][Oo][Ss]
transiciones [Tt][Rr][Aa][Nn][Ss][Ii][Cc][Ii][Oo][Nn][Ee][Ss]
inicial [Ii][Nn][Ii][Cc][Ii][Aa][Ll]
final [Ff][Ii][Nn][Aa][Ll][Ee][Ss]
ABRIR "{"
CERRAR "}"
SIMBOLO [a-zA-Z0-9]
NUMERO 0|[1-9][0-9]*
COMENTARIO "%"
LINIA "\n"
TAB "\t"
ESPACIO " "
ESPACIOS ({ESPACIO}|{TAB})*
COMA ","
TRANSICION "("{ESPACIOS}{NUMERO}{ESPACIOS}","{ESPACIOS}{SIMBOLO}{ESPACIOS}";"{ESPACIOS}{NUMERO}{ESPACIOS}")"
%%
{alfabeto} {printf("Alfabet"); simbol = 1;}
{estados} {printf("Estats"); estat = 1; simbol = 0;}
{transiciones} {printf("Transicions"); simbol = 0;}
{inicial} {printf("Estat Inicial"); simbol = 0;}
{final} {printf("Estats Finals"); simbol = 0;}
{COMENTARIO}(.)*{LINIA} {printf("S'ha detectat un Comentari \n");}
{TRANSICION} {printf("Transició");}
{NUMERO} {
if(simbol == 0){
printf("Número");
if( estat == 1 )
{
for(i=0; i<yyleng; i++) num_estats=num_estats*10+(yytext[i]-48);
estat=0;
}
}
else{printf("Símbol");}
}
{SIMBOLO} {printf("Símbol");}
{COMA} {printf(",");}
{ABRIR} {printf("{");}
{CERRAR} {printf("}");}
{ESPACIOS}|LINIA {}
%%
main(argc, argv)
int argc;
char **argv;
{
if(argc > 1) {
if(!(yyin = fopen(argv[1], "r"))) {
perror(argv[1]);
return (1);
}
}
yylex();
printf("\nNúmero d'estats: %i\n", num_estats);
}