Files
monkey/internal/token/token.go
Chuck Smith fc6ceee02c
Some checks failed
Build / build (push) Failing after 5m21s
Publish Image / publish (push) Failing after 32s
Test / build (push) Failing after 5m8s
restructure project
2024-03-28 16:20:09 -04:00

109 lines
1.6 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 = "-"
MULTIPLY = "*"
DIVIDE = "/"
MODULO = "%"
// Bitwise / Logical operators
// BITWISE_AND AND
BITWISE_AND = "&"
// BITWISE_OR OR
BITWISE_OR = "|"
// BITWISE_XOR XOR
BITWISE_XOR = "^"
// BITWISE_NOT NOT
BITWISE_NOT = "~"
// LeftShift
LEFT_SHIFT = "<<"
// RightShift
RIGHT_SHIFT = ">>"
//
// Comparision operators
//
// NOT the not operator
NOT = "!"
// AND the and operator
AND = "&&"
// OR the or operator
OR = "||"
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"
// IMPORT the `import` keyword (import)
IMPORT = "IMPORT"
)
var keywords = map[string]TokenType{
"fn": FUNCTION,
"true": TRUE,
"false": FALSE,
"if": IF,
"null": NULL,
"else": ELSE,
"return": RETURN,
"while": WHILE,
"import": IMPORT,
}
func LookupIdent(ident string) TokenType {
if tok, ok := keywords[ident]; ok {
return tok
}
return IDENT
}