无处不在的野牛语法错误
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];
所以第三次,你将覆盖内存的一些随机部分,之后几乎任何事情都可能出错。
动态数据结构并不难写。静态内存分配几乎总是会给您带来麻烦。
我正在使用 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];
所以第三次,你将覆盖内存的一些随机部分,之后几乎任何事情都可能出错。