gpt4 book ai didi

c - 如何解决2+2和2++2冲突

转载 作者:太空宇宙 更新时间:2023-11-04 05:43:21 25 4
gpt4 key购买 nike

在更大的程序中,我给出了以下内容(flex/bison)

在弹性中:

pn [\+|\-]
dig [0-9]+
exp [e|E]{dig}+

.

.

.

"+"             {printf("+ detected\n");
return PLUS_SIGN;}




{pn}?{dig}+ { printf("digit detected - %s\n",yytext);
sscanf(yytext, "%d", (int*)&yylval);
return TYPE_INT;}

在 Bison 中:

expr:
expr PLUS_SIGN expr
{
$$ = $1 + $3;
printf(" $$=%f\n",$$);
}
| TYPE_INT
{
$$ = (int)$1;
printf(" $$=%f\n",$$);
}
;

问题是:

当我输入 2+2 时,它会识别 2 和 +2 而不是 2 , + , 2

我怎样才能让它做加法?

最佳答案

{pn}?{dig}+

不要将加号或减号 ({pn?}) 作为数字标记的一部分。将它们视为两个单独的标记,+2。那么flex就不会有任何歧义需要解决。

{dig}+

相反,让 bison 处理一元加号和减号运算符。让它成为解析器的工作,而不是词法分析器的工作。

| PLUS_SIGN expr
{
$$ = +$2;
printf(" $$=%f\n",$$);
}
| MINUS_SIGN expr
{
$$ = -$2;
printf(" $$=%f\n",$$);
}

关于c - 如何解决2+2和2++2冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12540757/

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