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

flex运行提示negative range in character class报错如何修复

报错根因

你遇到的negative range in character class报错本质是flex正则的字符类语法规则触发的,和你写的printf语句没有关系:flex解析正则规则生成C代码时,报错行号会偏移指向规则对应的动作代码块,所以才会定位到第65行的print语句,实际问题出在上方的字符类规则[+-*(),/^]。

在方括号包裹的正则字符类中,未转义且位于两个字符中间的-会被识别为字符范围运算符,而非普通的减号字符。你代码里-夹在+和*之间,+的ASCII码值为43,*的ASCII码值为42,前者大于后者,就触发了「字符类中存在负范围」的报错。

修复方案

两种任选一种即可:

  • 把-移到字符类的最开头或者最末尾,处于该位置的-不会被识别为范围运算符,修改后正则为[-+*(),/^]或者[+*(),/^-]
  • 对-添加反斜杠转义,明确标记它是普通匹配字符,修改后正则为[+\-*(),/^]

修复后的完整规则示例:

[-+*(),/^] {
        printf("Token and Lexeme: %s\n", yytext);
        /*
        return *yytext;
        */
       }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:09:04