无处不在的野牛语法错误

Bison syntax error from nowhere

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

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

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

编辑: Some of parser code: 部分语法。如果我不触摸计数器它正在工作。

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


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


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


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

我觉得像

b := 5 + a;

将执行缩减

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

三次。

但是你声明:

int params[2];

所以第三次,你将覆盖内存的一些随机部分,之后几乎任何事情都可能出错。

动态数据结构并不难写。静态内存分配几乎总是会给您带来麻烦。