【发布时间】:2012-09-14 11:31:09
【问题描述】:
在更大的程序中,我给出了以下内容(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;}
在野牛中:
expr:
expr PLUS_SIGN expr
{
$$ = $1 + $3;
printf(" $$=%f\n",$$);
}
| TYPE_INT
{
$$ = (int)$1;
printf(" $$=%f\n",$$);
}
;
问题是:
当我给出 2+2 时,它会识别 2 和 +2 而不是 2 、 + 、 2
我怎样才能让它做加法?
【问题讨论】:
-
在遇到一些多用途标点符号/运算符的歧义问题后,我采用了不带 (f)lex/bison/yacc 的递归方式。
标签: c parsing bison calculator lex