-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlexico.l
83 lines (56 loc) · 2.07 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
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
%{
#include "expresiones.h"
#include <math.h>
int n_lineas;
%}
%option noyywrap
%x COM1 COM2 POS1 POS2
%%
^"#" BEGIN(COM2);
"#" BEGIN(COM1);
<COM1>\n {BEGIN(0);n_lineas++;/*return (yytext[0]);*/}
<COM2>\n {BEGIN(0);n_lineas++;}
<COM1>. ;
<COM2>. ;
"ON" strcpy(yylval.c_cadena, yytext); return ACTION;
"OFF" strcpy(yylval.c_cadena, yytext); return ACTION;
";" return PUNTOCOMA;
"," return COMA;
"int" return TIPO_ENTERO;
"float" return TIPO_REAL;
"string" return TIPO_TEXTO;
"position" return TIPO_POSITION;
"temperature" return TIPO_TEMPERATURE;
"light" return TIPO_LIGHT;
"smoke" return TIPO_SMOKE;
"alarm" return TIPO_ALARM;
"switch" return TIPO_SWITCH;
"message" return TIPO_MESSAGE;
"%%" return ESCENARIOS;
["].*["] {
strcpy(yylval.c_cadena, yytext);
return CADENA;
}
"start" return START;
"pause" return PAUSE;
"repeat" return REPEAT;
"scene" return SCENE;
"if" return IF;
"then" return THEN;
"else" return ELSE;
"<" return INI_CONO;
">" return END_CONO;
"[" return INI_BRACKET;
"]" return END_BRACKET;
[0-9]+ yylval.c_entero = atoi(yytext); return ENTERO;
[0-9]*[.][0-9]+([e][+-][0-9]*)? yylval.c_real= atof(yytext); return REAL;
true yylval.c_logica=true; return LOGICA;
false yylval.c_logica=false; return LOGICA;
[a-zA-ZñÑ_][a-zA-ZñÑ_0-9]* strcpy(yylval.c_cadena,yytext); return ID;
" " ;
\t ;
^\n n_lineas++;
^([ ]|[\t])+\n n_lineas++;
\n n_lineas++;
. return (yytext[0]);
%%