-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathflex.l
More file actions
70 lines (50 loc) · 1.85 KB
/
flex.l
File metadata and controls
70 lines (50 loc) · 1.85 KB
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
%{
#include <string.h>
#include <math.h>
#include "nicalc.h"
#include "bison.tab.h"
#include "taboaSimbolos.h"
#include "xestionErros.h"
%}
/*
Indícase que só se lerá un ficheiro de entrada,
que se creará un ficheiro cabeceira chamado lex.yy.h e
que non se creará nin a función input nin yyunput.
Estas dúas últimas opcións son para evitar warnings de compilación.
*/
%option noyywrap header-file="lex.yy.h" noinput nounput
/* DEFINICIÓNS */
/* Auxiliares */
LETRA [a-zA-Z]|_
IDENTIFICADOR {LETRA}({LETRA}|{DIXITO})*
DIXITO [0-9]
DIXITOS {DIXITO}({DIXITO})*
EXPONENTE [eE][+-]?{DIXITOS}
ENTEIRO {DIXITOS}
DECIMAL {DIXITOS}\.{DIXITOS}?{EXPONENTE}?|{DIXITOS}{EXPONENTE}|\.{DIXITOS}{EXPONENTE}?
/* Comentarios */
COMENTARIO_UNHA \/\/.*$
COMENTARIO_MULTI \/\*(.|\n)*\*\/
/* Compoñentes léxicos */
IGNORAR [ \t]
INDIVIDUAL [\+\-\*\/^=\(\),;\r\n]
NUM {ENTEIRO}|{DECIMAL}
FICHEIRO ({LETRA}|{DIXITO})+(\.({LETRA}|{DIXITO})+)+|(\/({LETRA}|{DIXITO})*)*\/({LETRA}|{DIXITO})+(\.({LETRA}|{DIXITO})+)+
%%
{IGNORAR}
{COMENTARIO_UNHA}
{COMENTARIO_MULTI}
{NUM} yylval.numero = atof(yytext); return NUM;
{IDENTIFICADOR} {
yylval.cadea = strdup(yytext);
CompLexico comp = buscarLexema(yylval.cadea);
if (comp.lexema == NULL) {
return VAR;
}
return comp.comp_lexico;
}
{INDIVIDUAL} return (int) *yytext;
{FICHEIRO} yylval.cadea = strdup(yytext); return FICHEIRO;
. lanzarErro(LEXEMA_DESCONOCIDO);
<<EOF>> executandoScript(0); fclose(yyin); yyrestart(stdin);
%%