package org.jcnc.snow.compiler.lexer.token;

/**
 * {@code TokenType} 枚举定义了 Snow 编程语言词法分析阶段可识别的所有词法单元类型。
 * <p>
 * 每个枚举值代表一种语义类别，
 * 用于描述源代码中出现的关键字、标识符、字面量、运算符、控制符号等语言构件。
 * 在语法分析及后续处理阶段，依赖该枚举对 Token 进行分类、判断与分支处理。
 * </p>
 */
public enum TokenType {

    /** 普通标识符，如变量名、函数名等 */
    IDENTIFIER,

    /** 语言保留关键字（如 if、return、module 等） */
    KEYWORD,

    /** 内置类型名称（如 int、string、bool 等） */
    TYPE,

    /** 字符串字面量（如 "hello"） */
    STRING_LITERAL,

    /** 数字字面量（整数或浮点数） */
    NUMBER_LITERAL,

    /** 冒号 ':' */
    COLON,

    /** 逗号 ',' */
    COMMA,

    /** 点号 '.' */
    DOT,

    /** 赋值符号 '=' */
    EQUALS,

    /** 取模运算符 '%' */
    MODULO,

    /** 加号 '+' */
    PLUS,

    /** 乘号 '*' */
    MULTIPLY,

    /** 减号 '-' */
    MINUS,

    /** 左括号 '(' */
    LPAREN,

    /** 右括号 ')' */
    RPAREN,

    /** 相等比较符号 '==' */
    DOUBLE_EQUALS,

    /** 不等比较符号 '!=' */
    NOT_EQUALS,

    /** 大于符号 '>' */
    GREATER_THAN,

    /** 大于等于符号 '>=' */
    GREATER_EQUAL,

    /** 小于符号 '<' */
    LESS_THAN,

    /** 小于等于符号 '<=' */
    LESS_EQUAL,

    /** 逻辑与符号 '&&' */
    AND,

    /** 逻辑或符号 '||' */
    OR,

    /** 换行符，标识逻辑换行 */
    NEWLINE,

    /** 单行或多行注释内容 */
    COMMENT,

    /** 文件结束符（End of File） */
    EOF,

    /** 无法识别的非法或未知符号 */
    UNKNOWN
}