package token type TokenKind int const ( EOF TokenKind = iota EOL // Keywords KwVar KwFn KwType KwIf KwElif KwElse KwFor KwTry KwCatch KwFinally KwReturn KwContinue KwBreak KwThrow KwIn KwNull KwTrue KwFalse KwThis KwUse KwFrom KwBy // Data Tokens Ident Int Float String // Punctuation Assign Plus Minus Star Slash Percent Bang Eq Neq Lt Gt Lte Gte LParen RParen LBrace RBrace LBracket RBracket Comma Dot SemiColon ) func (tk TokenKind) String() string { switch tk { case EOF: return "EOF" case EOL: return "EOL" case KwVar: return "var" case KwFn: return "fn" case KwType: return "type" case KwIf: return "if" case KwElif: return "elif" case KwElse: return "else" case KwFor: return "for" case KwTry: return "try" case KwCatch: return "catch" case KwFinally: return "finally" case KwReturn: return "return" case KwContinue: return "continue" case KwBreak: return "break" case KwThrow: return "throw" case KwIn: return "in" case KwNull: return "null" case KwTrue: return "true" case KwFalse: return "false" case KwThis: return "this" case KwUse: return "use" case KwFrom: return "from" case KwBy: return "by" case Ident: return "ident" case Int: return "int" case Float: return "float" case String: return "string" case Assign: return "=" case Plus: return "+" case Minus: return "-" case Star: return "*" case Slash: return "/" case Percent: return "%" case Bang: return "!" case Eq: return "==" case Neq: return "!=" case Lt: return "<" case Gt: return ">" case Lte: return "<=" case Gte: return ">=" case LParen: return "(" case RParen: return ")" case LBrace: return "{" case RBrace: return "}" case LBracket: return "[" case RBracket: return "]" case Comma: return "," case Dot: return "." case SemiColon: return ";" default: return "unknown" } }