Tokenizer

词法分析

基本信息

属性 值
路径 com.github.lunatrius.ingameinfo.parser.text.Tokenizer
行数 61
关联 TextParser 的 nextToken()(:28-32)

tokenize(:18-56)

public void tokenize(String str) throws Exception

⚠️ 声明 throws Exception —— 抛出的是 InvalidTokenException 或其它受检异常。 TextParser.load 必须 catch 或声明。

方法把 str 切成 Token 序列并存入内部列表。

nextToken(:58-60)

从列表头取一个并前移指针。 TextParser 的 private Token nextToken()(:28-32) 是它的包装。

状态

成员 说明
token 列表 tokenize 的产物
当前位置 nextToken 递增

⚠️ tokenize 可重复调用,但本类没有 reset 方法 —— 若对同一实例调用两次 tokenize,第二次会追加到已有列表, 指针位置不重置,导致解析从中间开始。 InGameInfoCore 的 setConfigFile(:123) 在每次切到 .txt 配置时都 new TextParser(),所以实际不会复用实例。

注释 / 空白处理

tokenize 的 39 行体(:18-56)里包含跳过逻辑。 由于 Token 的 TokenType 用 EnumSet 定义了 哪些类型是「异常」(EXCEPTIONS,见 Token 条目), 词法器需要区分「该位置有 token」与「该位置是注释/空白」。

相关