-
Notifications
You must be signed in to change notification settings - Fork 7
/
token.go
95 lines (89 loc) · 1.72 KB
/
token.go
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
88
89
90
91
92
93
94
95
// Based on The Interpreter Book.
package token
// TokenType is a string
type TokenType string
// Token struct represent the lexer token
type Token struct {
Type TokenType
Literal string
Line int
}
// pre-defined TokenType
const (
ILLEGAL = "ILLEGAL"
EOF = "EOF"
IDENT = "IDENT"
INT = "INT"
FLOAT = "FLOAT"
ASSIGN = "="
PLUS = "+"
COMMA = ","
SEMICOLON = ";"
MINUS = "-"
BANG = "!"
ASTERISK = "*"
SLASH = "/"
PERCENT = "%"
CARET = "^"
LT = "<"
LTEQ = "<="
GT = ">"
GTEQ = ">="
AND = "&&"
OR = "||"
AS = "AS"
LPAREN = "("
RPAREN = ")"
LBRACE = "{"
RBRACE = "}"
CLASS = "CLASS"
FUNCTION = "FUNCTION"
VAR = "VAR"
TRUE = "TRUE"
FALSE = "FALSE"
IF = "IF"
ELSE = "ELSE"
RETURN = "RETURN"
BREAK = "BREAK"
CONTINUE = "CONTINUE"
FOR = "FOR"
IN = "IN"
WHILE = "WHILE"
NEW = "NEW"
EQ = "=="
NOTEQ = "!="
STRING = "STRING"
LBRACKET = "["
RBRACKET = "]"
COLON = ":"
DOT = "."
SELF = "SELF"
NIL = "NIL"
)
// reversed keywords
var keywords = map[string]TokenType{
"class": CLASS,
"func": FUNCTION,
"var": VAR,
"true": TRUE,
"false": FALSE,
"if": IF,
"else": ELSE,
"return": RETURN,
"break": BREAK,
"continue": CONTINUE,
"as": AS,
"for": FOR,
"in": IN,
"while": WHILE,
"new": NEW,
"self": SELF,
"nil": NIL,
}
// LookupIdentifier used to determinate whether identifier is keyword nor not
func LookupIdentifier(identifier string) TokenType {
if tok, ok := keywords[identifier]; ok {
return tok
}
return IDENT
}