gpt4 book ai didi

c - 不知从何而来的 Bison 语法错误

转载 作者:行者123 更新时间:2023-11-30 20:36:55 26 4
gpt4 key购买 nike

我正在使用 FLEX 和 Bison 编写一个编译器。作为输入,我有一个简单的程序。

DECLARE
a b
IN
GET a;
b := 5 + a;
a := b + 3;
END

在我的parser.y我正在使用整数辅助变量 counter当我给它分配零时,我得到 syntax error我不知道为什么这个小小的改变会让我的程序崩溃。与syntax!无关我很感激那些有 C 和 Bison 经验的人,他们可以告诉我问题出在哪里。如果这个变量没有被触及或者被赋予不同的值,它就可以正常工作。预先感谢您。

编辑:一些解析器代码:语法的一部分。如果我不触摸计数器,它就会工作。

%{
int counter = 0;
int params[2];
char* EXP = "NONE";
%}


%%
command : identifier ASSGNOP expression';' {gen_code(EXP,params,$1); counter = 0; }


value | identifier { params[counter] = gen_variable($1,counter); counter++; }


expression | value '+' value {EXP = "ADD";}

最佳答案

在我看来就像

b := 5 + a;

将执行减少

{ params[counter] = gen_variable($1,counter); counter++; }

三次。

但你声明:

int params[2];

因此,第三次,您将覆盖内存的某些随机部分,之后几乎任何事情都可能出错。

<社论评论>动态数据结构并不难编写。静态内存分配几乎总是会给你带来麻烦。

关于c - 不知从何而来的 Bison 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34642923/

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