-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlexico.l
48 lines (45 loc) · 1.43 KB
/
lexico.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
%{
/* Ejemplo para una pequeña calculadora que permite trabajar
con las operaciones básicas de suma, resta, producto, division y
trigonometricas como el seno y el coseno */
#include <stdio.h>
#include <stdlib.h>
#include "sintactico.tab.h"
int nlines=0;
%}
DIGITO [0-9]
ID [a-zA-Z][a-zA-Z0-9_]*
%%
{DIGITO}+("."{DIGITO}+)? {//printf("Encontrado TKN_NUM: %f\n",atof(yytext));
yylval.real=atof(yytext);
return(TKN_NUM);}
"=" {//printf("Encontrado TKN_ASIGN: %s\n",yytext); return(TKN_ASIGN);}
";" {//printf("Encontrado TKN_PTOCOMA: %s\n",yytext); return(TKN_PTOCOMA);}
"*" {//printf("Encontrado TKN_MULT: %s\n",yytext); return(TKN_MULT);}
"/" {//printf("Encontrado TKN_DIV: %s\n",yytext); return(TKN_DIV);}
"+" {//printf("Encontrado TKN_MAS: %s\n",yytext); return(TKN_MAS);}
"-" {//printf("Encontrado TKN_MENOS: %s\n",yytext); return(TKN_MENOS);}
"(" {//printf("Encontrado TKN_PAA: %s\n",yytext); return(TKN_PAA);}
")" {//printf("Encontrado TKN_PAC: %s\n",yytext); return(TKN_PAC);}
"cos" {//printf("Encontrado TKN_COS: %s\n",yytext); return(TKN_COS);}
"sen" {//printf("Encontrado TKN_SEN: %s\n",yytext); return(TKN_SEN);}
{ID} {//printf("Encontrado TKN_ID: %s\n",yytext); return(TKN_ID);}
"\n" {nlines++;}
.
%%
/********
Para el lexico solo
void main(int argc,char **argv)
{
if (argc>1)
yyin=fopen(argv[1],"rt");
else
yyin=stdin;
yylex();
printf("\nNumero lineas analizadas: %d\n", nlines);
}
*******/
/* para compilar
flex lexico.l
cc lex.yy.c -o milex -lfl -lm
*/