You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flex在CHR状态下扫描EOF出现重复报错该如何解决?

重复报错的根本原因

这是Flex/Lex扫描器的起始状态(Start Condition)持久化特性导致的:

  • 你在匹配到字符字面量的开头单引号'时,已经调用BEGIN(CHR)将扫描器切换到了专门处理字符内容的CHR自定义状态,该状态会一直保留直到你手动切换到其他状态。
  • 最初的代码在CHR状态下触发EOF规则时,只打印了错误、返回了整数字面量token,没有将扫描器状态切回默认的INITIAL状态。
  • 当你把INTLIT返回给语法解析器后,解析器会继续要求扫描器提供下一个token,此时扫描器仍然停留在CHR状态,输入已经处于EOF位置,就会第二次匹配到<CHR><<EOF>>规则,重复打印错误。

修复逻辑说明

你添加的BEGIN(INITIAL)就是在返回INTLIT之前手动将扫描器切回默认初始状态,下次解析器请求下一个token时,扫描器会触发INITIAL状态下的EOF处理逻辑,直接返回EOF标记终止扫描,不会再进入CHR状态的EOF规则,自然不会重复打印错误。


内容的提问来源于stack exchange,提问作者Riomare

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 15:24:02