gpt4 book ai didi

Bison 优先不起作用

转载 作者:行者123 更新时间:2023-12-01 09:37:42 25 4
gpt4 key购买 nike

这是我的弹性代码

%{
#include "fl.tab.h"
%}
%%
[0-9]+ { yylval = atoi(yytext);
return INTEGER; }
\n return 0;
[ \t] ;
. return yytext[0];
%%

还有我的野牛密码
%{ 
#include <stdio.h>
%}
%token INTEGER
%left '+' '-'
%left '*'
%%
Statement : expr {printf("%d\n",$1);}
;
expr : expr '+' INTEGER {$$ = $1 + $3;}
| expr '-' INTEGER {$$ = $1 - $3;}
| expr '*' INTEGER {$$ = $1 * $3;}
| INTEGER {$$ = $1;}
;
%%

int main(void){
yyparse();
return 0;
}

当我输入 4 + 5 * 2 时,它的输出为 18。但正确答案应该是 14。我哪里弄错了?

最佳答案

你的问题是你有 expr OP INTEGER对于每个规则。

你拥有它的方式野牛将其解析为:

expr * 2 -> (4 + 5) * 2

它强制优先级向左移动,而不是由您的优先级规则确定。

优先级仅适用于解析文本的方法不止一种时,而不是您所拥有的,请尝试
expr :  expr '+' expr  {$$ = $1 + $3;}
| expr '-' expr {$$ = $1 - $3;}
| expr '*' expr {$$ = $1 * $3;}
| INTEGER {$$ = $1;}
;

那样 5 + 4 * 2可以解析为 ((5 + 4) * 2)(5 + (4 * 2)) ,并且野牛将咨询优先级以确定正确的解析。

关于 Bison 优先不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4885192/

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