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
相关产品推荐
相关产品推荐

