Token

token 类型与正则

基本信息

属性 值
路径 com.github.lunatrius.ingameinfo.parser.text.Token
行数 67

TokenType 枚举的关键成员

public static final EnumSet<TokenType> EXCEPTIONS =
    EnumSet.of(FUNC_TAIL, ARGS_HEAD, ARGS_SEPARATOR, ARGS_TAIL);   // :20

⚠️ 字段名 EXCEPTIONS 有歧义:它列的不是「异常 token」, 而是 TextParser 里不需要产生值的控制类 token (函数尾部、参数头、参数分隔符、参数尾部)。 命名与语义相反,容易误读。

从这 4 个名字可推断文本语法的 token 分类:

类别 含义
FUNC_TAIL 函数名结束
ARGS_HEAD 参数区开始
ARGS_SEPARATOR 参数分隔
ARGS_TAIL 参数区结束

⚠️ 这 4 个常量只出现这一处, TextParser 里通过 TokenType 间接引用, 未直接按名比较 —— 具体判定逻辑在 values / valuesTail / value 三方法内。

getPattern(:27-35)

每个 TokenType 覆写 getPattern() 返回自己的 Pattern。 Tokenizer 用它做最长匹配。

⚠️ 用正则而非手写扫描器做词法, 意味着每个 token 都要编译/执行一次正则; 而 Tokenizer.tokenize 声明 throws Exception —— Pattern.compile 与 Matcher 的异常都在这条路径上。

构造与访问器

成员 行 说明
Token(String lexem, Location start, Location end, TokenType type) :37 四参构造
getLexem() :56 字面量文本
getType() :60 token 类型
isEof() :64 是否文件结束标记

⚠️ 构造器不校验 lexem 与 type 是否匹配 —— getPattern() 的正则与实际字面量的一致性由 Tokenizer 保证。

⚠️ 没有 equals / hashCode 覆写 —— 若 token 被放进 Set 或作 Map 键,会退化为引用比较。 TextParser 只做顺序遍历,未用作集合元素,所以无实际影响。

toString(:45-54)

[Token] 'lexem' 形式,用于错误信息。

相关