package token // TokenType represents the type of the token type TokenType string // Token represents a token, with the type and the literal value of the token type Token struct { Type TokenType Literal string } const ( ILLEGAL = "ILLEGAL" EOF = "EOF" IDENT = "IDENT" INT = "INT" COMMA = "," SEMICOLON = ";" LPAREN = "(" RPAREN = ")" LBRACE = "{" RBRACE = "}" FUNCTION = "FUNCTION" LET = "LET" // The following tokens are for operators ASSIGN = "=" PLUS = "+" MINUS = "-" BANG = "!" ASTERISK = "*" SLASH = "/" LT = "<" GT = ">" ) // List of our keywords for the language var keywords = map[string]TokenType{ "fn": FUNCTION, "let": LET, } // LookupIdent returns the token type for a given identifier. If the identifier // is one of our keyword, we return the corresponding value, otherwise we return // the given identifier. func LookupIdent(ident string) TokenType { if tok, ok := keywords[ident]; ok { return tok } return IDENT }