我在使用bison联合定义中的结构指针时遇到了一些麻烦,因为我需要这些元素的内存位置,但所有元素都需要seem to point to the same union position。不确定如果我使用正确的方式。我的代码如下:
main.h:
typedef struct _control *control;
struct _control { ... };
typedef struct _symbol *symbol;
struct _symbol { ... };
...
#include "parser.h"
parser.y
%{
#include "main.h"
%}
%union {
control ctrl;
symbol s_head;
symbol s_tail;
}
...
%%
...
%%
int main (int argc, char** argv) {
...
yylval.ctrl = malloc(sizeof(struct _control));
yylval.s_head = malloc(sizeof(struct _symbol));
yylval.s_tail = malloc(sizeof(struct _symbol));
// This will give me the same memory position
printf("%ld %ld %ld %ld\n",
yylval, yylval.ctrl,
yylval.s_head, yylval.s_tail);
...
}
答案 0 :(得分:0)
不确定这是否是正确的做法,但是当我将它们转换为结构时,我只是将我的联合元素映射。
main.h
typedef struct _control *control;
struct _control { ... };
typedef struct _symbol *symbol;
struct _symbol { ... };
typedef struct _global *global;
struct _global { ... };
parser.y
%{
#include "main.h"
%}
%union {
global g;
}
...
%%
...
%%
int main (int argc, char** argv) {
...
yylval.g->ctrl->some_element ...
yylval.g->s_head ...
...
}
嗯,这只是有效。