annotate token/token.go @ 3:6bd28d00a4f4 default tip lexer

...
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Tue, 19 May 2020 18:23:57 +0900
parents a1166907ac2d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
1 package token
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
2
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
3 const (
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 ILLEGAL = "ILLEGAL"
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 EOF = "EOF"
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
6
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
7 IDENT = "IDENT"
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
8 INT = "INT"
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
9
3
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
10 // Operators
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
11 ASSIGN = "="
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
12 PLUS = "+"
1
a1166907ac2d add calc test
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
13 MINUS = "-"
a1166907ac2d add calc test
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
14 BANG = "!"
a1166907ac2d add calc test
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
15 ASTERISK = "*"
a1166907ac2d add calc test
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
16 SLASH = "/"
a1166907ac2d add calc test
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
17
a1166907ac2d add calc test
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
18 LT = "<"
a1166907ac2d add calc test
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
19 GT = ">"
a1166907ac2d add calc test
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 0
diff changeset
20
0
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
21 COMMA = ","
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 SEMICOLON = ";"
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
23
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 LPAREN = "("
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 RPAREN = "("
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 LBRACE = "{"
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 RBRACE = "}"
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
28
3
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
29 // Keywords
0
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 FUNCTION = "FUNCTION"
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 LET = "LET"
3
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
32 TRUE = "TRUE"
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
33 FALSE = "FALSE"
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
34 IF = "IF"
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
35 ELSE = "ELSE"
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
36 RETURN = "RETURN"
0
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 )
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
38
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 type TokenType string
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
40
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 type Token struct {
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 Type TokenType
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 Literal string
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 }
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
45
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 var keywords = map[string]TokenType{
3
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
47 "fn": FUNCTION,
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
48 "let": LET,
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
49 "true": TRUE,
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
50 "false": FALSE,
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
51 "if": IF,
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
52 "else": ELSE,
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents: 1
diff changeset
53 "return": RETURN,
0
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 }
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
55
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 //LookupIdent is jugde ident or defined keywords
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 func LookupIdent(ident string) TokenType {
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 if tok, ok := keywords[ident]; ok {
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 return tok
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 }
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
61 return IDENT
72d22ea56795 imple simple lexer
anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 }