gpt4 book ai didi

bison - 获取 : warning, 规则无法匹配

转载 作者:行者123 更新时间:2023-12-04 10:40:29 25 4
gpt4 key购买 nike

我正在构建一个词法和语法分析器。当我尝试将 flex 与我的 .l 文件一起使用时,我收到以下警告。

littleDuck.l:26: warning, rule cannot be matched

规则 26 是以 {cteI} 开头的规则,我的规则部分如下:
[ \t\n]     ;
{RW} {return RESERVED;}
{id} {return ID;}
{ops} {return OPERATOR;}
{seps} {return SEPARATOR;}
{cteI} {yylval.ival = atoi(yytext); return INT;}
{cteF} {yylval.fval = atof(yytext); return FLOAT;}
{ctestring} {yylval.sval = strdup(yytext); return STRING;}
. ;

另外,我的定义部分是这样的:
RW      program|var|int|float|print|else|if
id ([a-z]|[A-Z)([a-z]|[A-Z]|[0-9])*
ops "="|"<"|">"|"<>"|"+"|"-"|"/"|"*"
seps ":"|","|";"|"{"|"}"|"("|")"
cteI [0-9]+
cteF {cteI}(\.{cteI}((e|E)("+"|"-")?{cteI})?)?
ctestring (\".*\")

为什么会出现此警告,以及如何修改我的文件使其不出现?

最佳答案

警告告诉您可能与 {cteI} 匹配的任何内容将始终与某些较早的规则匹配。在您的情况下,它表明规则与您期望的不匹配,可能是由于拼写错误。在您的情况下,它是 {id}规则,您将其定义为:

([a-z]|[A-Z)([a-z]|[A-Z]|[0-9])*

注意圆括号和方括号的嵌套。为清楚起见添加空格,这是
( [a-z] | [A-Z)([a-z] | [A-Z] | [0-9] )*

这将匹配任何字母、数字或字符序列 ( )[ .你可能的意思是:
([a-z]|[A-Z])([a-z]|[A-Z]|[0-9])*

可以更清楚地写成
[a-zA-Z][a-zA-Z0-9]*

关于bison - 获取 : warning, 规则无法匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15057399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com