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

使用Flex/Bison开发算术表达式求值程序:空格无效问题咨询

解决Flex中空白字符被判定为无效字符的问题

你的问题根源在于当前Lex规则里的通配符.会匹配所有未被前面规则覆盖的字符,包括空格(' '),然后把它返回给Bison,导致程序认为这是无效字符。要解决这个问题,只需要在Lex文件中添加专门匹配空白字符的规则,让Flex直接忽略它们即可。

具体修改步骤

  1. 在你的Lex规则中,添加一条匹配空格和制表符的规则,放在通配符.规则的前面(因为Lex会按规则顺序优先匹配):

    [ \t]+    ; /* 忽略空格和制表符 */
    

    这里的动作;表示不执行任何操作,直接跳过这些空白字符。

  2. 修改后的完整Lex代码示例:

    %{ 
    #include<math.h> 
    extern yylval; 
    %}
    %%
    [0-9]+     {yylval=atoi(yytext);return NUM;}
    [+]        {return '+';}
    [-]        {return '-';}
    [*]        {return '*';}
    [/]        {return '/';}
    [ \t]+     ; /* 忽略空格和制表符 */
    \n         return 0;
    .          {return yytext[0];}
    %%
    

额外说明

  • 如果还需要忽略其他空白字符(比如换行符,不过你的代码里已经单独处理了\n),可以把规则改成[ \t\n]+,但注意不要和你已有的\n规则冲突。
  • 规则的顺序很重要:一定要把空白字符的规则放在通配符.规则之前,否则.会先匹配空格,导致无效字符的问题依然存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:36:25