0
|
1 package token
|
|
2
|
|
3 const (
|
|
4 ILLEGAL = "ILLEGAL"
|
|
5 EOF = "EOF"
|
|
6
|
|
7 IDENT = "IDENT"
|
|
8 INT = "INT"
|
|
9
|
3
|
10 // Operators
|
|
11 ASSIGN = "="
|
|
12 PLUS = "+"
|
1
|
13 MINUS = "-"
|
|
14 BANG = "!"
|
|
15 ASTERISK = "*"
|
|
16 SLASH = "/"
|
|
17
|
|
18 LT = "<"
|
|
19 GT = ">"
|
|
20
|
0
|
21 COMMA = ","
|
|
22 SEMICOLON = ";"
|
|
23
|
|
24 LPAREN = "("
|
|
25 RPAREN = "("
|
|
26 LBRACE = "{"
|
|
27 RBRACE = "}"
|
|
28
|
3
|
29 // Keywords
|
0
|
30 FUNCTION = "FUNCTION"
|
|
31 LET = "LET"
|
3
|
32 TRUE = "TRUE"
|
|
33 FALSE = "FALSE"
|
|
34 IF = "IF"
|
|
35 ELSE = "ELSE"
|
|
36 RETURN = "RETURN"
|
0
|
37 )
|
|
38
|
|
39 type TokenType string
|
|
40
|
|
41 type Token struct {
|
|
42 Type TokenType
|
|
43 Literal string
|
|
44 }
|
|
45
|
|
46 var keywords = map[string]TokenType{
|
3
|
47 "fn": FUNCTION,
|
|
48 "let": LET,
|
|
49 "true": TRUE,
|
|
50 "false": FALSE,
|
|
51 "if": IF,
|
|
52 "else": ELSE,
|
|
53 "return": RETURN,
|
0
|
54 }
|
|
55
|
|
56 //LookupIdent is jugde ident or defined keywords
|
|
57 func LookupIdent(ident string) TokenType {
|
|
58 if tok, ok := keywords[ident]; ok {
|
|
59 return tok
|
|
60 }
|
|
61 return IDENT
|
|
62 }
|