野牛语法错误无处不在

时间:2016-01-06 21:17:05

标签: c parsing syntax-error bison flex-lexer

我正在使用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";}   

1 个答案:

答案 0 :(得分:0)

在我看来像是

b := 5 + a;

将执行减少

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

三次。

但你宣布:

int params[2];

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

< editorial_comment> 动态数据结构不难编写。静态内存分配几乎总会让你陷入困境。 < / editorial_comment>