-
Notifications
You must be signed in to change notification settings - Fork 0
/
plp5.l
86 lines (73 loc) · 2.49 KB
/
plp5.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
85
86
/*------------------------------ plp5.l -------------------------------*/
D [0-9]
L [a-zA-Z]
LD [0-9a-zA-Z]
%{
#include <string.h>
#include <string>
#include <iostream>
using namespace std;
#include "comun.h"
#include "plp5.tab.h"
int ncol = 1, nlin = 1;
int findefichero = 0;
int ret(int token); // funcion que actualiza ’nlin’ y ’ncol’ y devuelve el token
void msgError(int nerror, int nlin,int ncol,const char *s); // funcion para producir mensajes de error
%}
%x COMENTARIO
%%
%{
/* codigo local */
%}
" " {ncol++;}
[\t] {ncol++;}
[\n] {nlin++;ncol=1;}
[\r] {nlin++;ncol=1;}
"//"(.)* {; /* comentarios de una linea, no hacer nada */}
"class" {return ret(_class);}
"attributes" {return ret(attributes);}
"methods" {return ret(methods);}
"int" {return ret(_int);}
"float" {return ret(_float);}
"main" {return ret(_main);}
"print" {return ret(_print);}
"scan" {return ret(_scan);}
"if" {return ret(_if);}
"else" {return ret(_else);}
"while" {return ret(_while);}
"this" {return ret(_this);}
"return" {return ret(_return);}
{L}({LD})* {return ret(id);}
{D}+ {return ret(nentero);}
{D}+(\.){D}+ {return ret(nreal);}
":" {return ret(dosp);}
"," {return ret(coma);}
";" {return ret(pyc);}
"." {return ret(punto);}
"(" {return ret(pari);}
")" {return ret(pard);}
"==" {return ret(relop);}
"!=" {return ret(relop);}
"<" {return ret(relop);}
"<=" {return ret(relop);}
">" {return ret(relop);}
">=" {return ret(relop);}
"+" {return ret(addop);}
"-" {return ret(addop);}
"*" {return ret(mulop);}
"/" {return ret(mulop);}
"=" {return ret(asig);}
"[" {return ret(cori);}
"]" {return ret(cord);}
"{" {return ret(llavei);}
"}" {return ret(llaved);}
. {msgError(ERRLEXICO,nlin,ncol,yytext);}
%%
int yywrap(void) {findefichero=1; return 1;} /* para no tener que linkar con la libreria del lex */
int ret(int token){
yylval.lexema=strdup(yytext);
yylval.nlin=nlin;
yylval.ncol=ncol;
ncol+=(strlen(yytext));
return(token);
}