-
Notifications
You must be signed in to change notification settings - Fork 0
/
Token.java
64 lines (45 loc) · 1.37 KB
/
Token.java
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
public class Token {
private int line, col;
private String token, type;
private String keywords[] = new String[]{"true", "false", "nil", "let", "letrec", "def", "set", "lambda", "if", "elseif",
"else", "guard", "catch", "raise"};
public Token(int l, int c, String token){
line = l;
col = c;
this.token = token;
type = getType();
}
public String getTokenVal(){
return token;
}
private boolean isKeyword(){
for(int i = 0; i < keywords.length; i++){
if(keywords[i].equals(token)) return true;
}
return false;
}
public String getType(){
//Three types to keep track of, symbol, integer, and string
//Check against a regex to determine
//Strings enclosed in double quotes ".*"
//Integers are only numbers [0-9][0-9]*
//Symbols are [a-zA-Z_][0-9a-zA-Z_]* and NOT keywords
//Everything else is "other"
//Strings
if(token.matches("\".*\"")){
type = "string";
}
//Integers
else if(token.matches("[0-9][0-9]*")){
type = "integer";
}
//Symbols
else if(token.matches("[a-zA-Z_][0-9a-zA-Z_]*") && !isKeyword()){
type = "symbol";
}
else{
type = "other";
}
return type;
}
}