-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlexic.flex
More file actions
87 lines (77 loc) · 3.02 KB
/
lexic.flex
File metadata and controls
87 lines (77 loc) · 3.02 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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
package com.jordanec.calcjec;
/**
* Created by jordan on 10/10/16.
*/
import java_cup.runtime.*;
import com.jordanec.calcjec.operations.*;
%%
%class LexerAnalyser
%unicode
%cup
%line
%column
%ignorecase
%{
private Symbol symbol(int type) {
return new Symbol(type, yyline, yycolumn);
}
private Symbol symbol(int type, Object value) {
return new Symbol(type, yyline, yycolumn, value);
}
%}
LineTerminator = \r|\n|\r\n
InputCharacter = [^\r\n]
WhiteSpace = {LineTerminator} | [ \t\f]
Digit = [0-9]
Number = {Digit} {Digit}*
Float = [0-9]+\.[0-9]+
Letter = [a-zA-Z]
Boolean = true|false
Identifier = {Letter} ({Letter}|{Digit})*
Relational = <|>|<=|>=|<>|==
%%
<YYINITIAL> {
/*Tarea 1*/
"hel" { return symbol(sym.HELP, yytext()); }
"ver" { return symbol(sym.VERS, yytext()); }
"lim" { return symbol(sym.LIMP, yytext()); }
"ter" { return symbol(sym.TERM, yytext()); }
/*Tarea 2*/
"def" { return symbol(sym.DEFI, yytext()); }
"lis" { return symbol(sym.LIST, yytext()); }
/*Tarea 3*/
"cal" { return symbol(sym.CALC, yytext()); }
/*Tarea 4*/
"bor" { return symbol(sym.BORR, yytext()); }
"gra" { return symbol(sym.GRAB, yytext()); }
/*Proy*/
"val" { return symbol(sym.VALI, yytext()); }
/*-*/
"help" { return symbol(sym.HELP, yytext()); }
"vers" { return symbol(sym.VERS, yytext()); }
"limp" { return symbol(sym.LIMP, yytext()); }
"term" { return symbol(sym.TERM, yytext()); }
"defi" { return symbol(sym.DEFI, yytext()); }
"list" { return symbol(sym.LIST, yytext()); }
"calc" { return symbol(sym.CALC, yytext()); }
"borr" { return symbol(sym.BORR, yytext()); }
"grab" { return symbol(sym.GRAB, yytext()); }
"vali" { return symbol(sym.VALI, yytext()); }
{Number} { return symbol(sym.NUMBER, new Integer(Integer.parseInt(yytext()))); }
{Float} { return symbol(sym.FLOAT, new Float(Float.parseFloat(yytext()))); }
{Boolean} { return symbol(sym.BOOLEAN, new Boolean(Boolean.parseBoolean(yytext()))); }
{Identifier} { return symbol(sym.IDENTIFIER, yytext()); }
"+" { return symbol(sym.SUM); }
"-" { return symbol(sym.SUBTRACTION); }
"*" { return symbol(sym.MULTIPLICATION); }
"/" { return symbol(sym.DIVISION); }
"^" { return symbol(sym.POW); }
"#" { return symbol(sym.SQUARE_ROOT); }
"(" { return symbol(sym.LEFT_PAREN); }
")" { return symbol(sym.RIGHT_PAREN); }
"=" { return symbol(sym.ASSIGN); }
{Relational} { return symbol(sym.RELATIONAL, yytext()); }
"?" { return symbol(sym.CONDITIONAL); }
{WhiteSpace} { }
}
[^] { throw new VisiCalcJECException(VisiCalcJECException.lexicError102);}