Files
monkey/token/token.go
Chuck Smith cbb430b47d
Some checks failed
Build / build (push) Successful in 9m45s
Test / build (push) Failing after 15m53s
moulo
2024-03-22 16:49:33 -04:00

81 lines
1.2 KiB
Go

package token
type TokenType string
type Token struct {
Type TokenType
Literal string
}
const (
ILLEGAL = "ILLEGAL"
EOF = "EOF"
// COMMENT a line comment, e.g: # this is a comment
COMMENT = "COMMENT"
// Identifiers + literals
IDENT = "IDENT" // add, foobar, x, y
INT = "INT" // 123456
STRING = "STRING"
// Operators
BIND = ":="
ASSIGN = "="
PLUS = "+"
MINUS = "-"
BANG = "!"
ASTERISK = "*"
SLASH = "/"
PERCENT = "%"
LT = "<"
LTE = "<="
GT = ">"
GTE = ">="
EQ = "=="
NOT_EQ = "!="
// Delimiters
COMMA = ","
SEMICOLON = ";"
COLON = ":"
DOT = "."
LPAREN = "("
RPAREN = ")"
LBRACE = "{"
RBRACE = "}"
LBRACKET = "["
RBRACKET = "]"
// Keywords
FUNCTION = "FUNCTION"
TRUE = "TRUE"
FALSE = "FALSE"
NULL = "NULL"
IF = "IF"
ELSE = "ELSE"
RETURN = "RETURN"
WHILE = "WHILE"
)
var keywords = map[string]TokenType{
"fn": FUNCTION,
"true": TRUE,
"false": FALSE,
"if": IF,
"null": NULL,
"else": ELSE,
"return": RETURN,
"while": WHILE,
}
func LookupIdent(ident string) TokenType {
if tok, ok := keywords[ident]; ok {
return tok
}
return IDENT
}