作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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/
我是一名优秀的程序员,十分优秀!