我正在使用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";}
答案 0 :(得分:0)
在我看来像是
b := 5 + a;
将执行减少
{ params[counter] = gen_variable($1,counter); counter++; }
三次。
但你宣布:
int params[2];
所以第三次,你将覆盖一些随机的内存部分,之后几乎任何事情都可能出错。
< editorial_comment> 动态数据结构不难编写。静态内存分配几乎总会让你陷入困境。 < / editorial_comment>