错误:'TR'之前的预期说明符限定符列表

时间:2011-03-11 21:16:15

标签: c bison

我在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内部有错误。我不明白为什么!!有什么帮助吗?

2 个答案:

答案 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的语法吗?