Bison 构建警告:“给出了 -s 选项,但可以匹配默认规则”

5 warnings yacc lex bison

我收到警告

warning, -s option given but default rule can be matched
Run Code Online (Sandbox Code Playgroud)

如果您在 google 上搜索“给出的选项,但可以匹配默认规则”,您将在“诊断”部分的旧 Flex 联机帮助页中找到 Flex 手册关于诊断的章节和此条目:

警告,“-s 选项给出,但可以匹配默认规则”意味着默认规则(匹配任何单个字符)可能(可能仅在特定开始条件下)是唯一匹配特定输入的规则。既然-s给出了,大概这不是故意的。

我的构建文件没有-s选项。我写

bison -y -d calc1.y
flex calc1.l
gcc code...
Run Code Online (Sandbox Code Playgroud)

如何修复此警告?

这是我的 lex 文件的一个小版本。此文件也会触发警告

%{
#include "y.tab.h"
%}
%option noyywrap nodefault yylineno

%%

[0-9]+      {
                return INTEGER;
            }

[-+()=/*{},;\n] { return *yytext; }

[ \t]       /* skip whitespace */

[a-zA-Z0-9_]* { printf("lex Unknown character = '%s'", yytext); yyerror("lex Unknown character"); }

%%
Run Code Online (Sandbox Code Playgroud)

小智 4

%option nodefault 相当于 -s