我在Bison的联盟中定义我的结构时遇到了问题
我制作了一个结构
typedef enum {Binary_Op,Uni_Op,Variable, Const} Tag_Type;
typedef struct tree
{
Tag_Type Tag;
union
{
struct
{
char op;
struct tree *left, *right;
}bin_op;
struct
{
char op;
struct tree *arg; /* negative or positive */
}uni_op;
char var;
int const_val;
}u;
}TREE_REC, *TR;
%}
%union
{
int y_int;
TR y_tree;
}
%type <y_tree> expr term factor assign
%token <y_int> CONST
%token <y_int> VAR
%%
但在联盟TR内部有错误。我不明白为什么!!有什么帮助吗?
答案 0 :(得分:4)
您需要在struct tree
之前TR
的头文件中定义#include
和#include "y.tab.h"
。在编译器看到它的定义之前,错误消息告诉您正在尝试使用TR
。
答案 1 :(得分:0)
我对你的typedef struct tree {...} TREE_REC, *TR
感到有点困惑。我宁愿写:
typedef struct tree {...} TREE_REC; //Alias on struct tree
typedef TREE_REC * TR; //Definition of the pointer to a struct tree
你的typedef中的,
令我感到不安。
您可以测试我的解决方案,或者只是澄清typedef的语法吗?