-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.l
84 lines (50 loc) · 1.23 KB
/
main.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
/*
Path
> cd Documentos/Lenguajes/AnalizadorLexico/
Build with
> make
Test with
> ./executable < test/code1 > out/code1.out
*/
%{
%}
/*Definiciones
<Nombre> <expresion_regular>
*/
NUMBER [0-9]+|[0-9]+\.[0-9]+|\.[0-9]+
IDPREDI [pqrt][0-9]{0,5}
IDVAR [xyz][0-9]{0,5}
VOID [ \t\n]+
END [;]
COMMENT ["#"][ \t\na-zA-Z0-9]*[\n]
ARITMETIC "+"|"-"|"*"|"/"
LOGIC "&&"|"\|\|"|"->"
RELATIONAL ":"|":="|"<>"|"<"|">"
DELIMITER "("|")"|"\["|"\]"|"{"|"}"
/* Reglas Lexicas
Patrones que se reconoceran del fichero de entrada
<patron(expresión_regular)> <acción(codigo C a ejecutar)>
*/
%%
{VOID} /*Espacios en blanco*/
{NUMBER} { printf( " Numbero " ); }
{IDPREDI} { printf( " predicadoArit " ); }
{IDVAR} { printf( " predicadoAlge " ); }
{ARITMETIC}|{LOGIC}|{RELATIONAL} { printf( " operador "); }
{DELIMITER} { printf( " delimitador "); }
{COMMENT} /*Linea de commentario*/
{END} { printf( "\n"); }
. { printf( "Desconocido" ); }
%%
/*Codigo C rutinas de usuario (opcional) */
main( argc, argv )
int argc;
char **argv;
{
++argv, --argc; /* se salta el nombre del programa */
if ( argc > 0 )
yyin = fopen( argv[0], "r" );
else
yyin = stdin;
yylex();
}