我在 Bison 中编写了一个解析器,它对表达式的作用如下:
expr:
integer{
exprPass pass;
sprintf(s, load instructions, $1); //s is a global char buffer
pass.s= s;
pass.type = int;
$$ = pass;
}
|
double{
exprPass pass;
sprintf(s, load instructions, $1); //s is a global char buffer
pass.s= s;
pass.type = int;
$$ = pass;
}
(etc)
这工作正常,直到我通过类似的东西运行它
comparison: expression LESSTHAN expression
当我打印 $1.s 时,它与 #3.s 相同!
$2 有正确的运算符,没有问题
我知道表达工作正常;使用 printfs 用 2<0 测试它告诉我 pass.s 得到 2,然后是 0。我不知道 $1 是如何以某种方式设置为 $3 ...我必须认为问题出在我的 C 代码中?
我的表达式结构是
typedef exprPass{
char* s;
variable_type type;
//some other data
}