Ошибка: ожидаемый список спецификаторов-спецификаторов перед TR - PullRequest
1 голос
/ 12 марта 2011

У меня проблема с определением структуры внутри объединения на 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 ]

4 голосов
/ 12 марта 2011

Вам необходимо определить struct tree и TR в заголовочном файле, который вы #include перед вами #include "y.tab.h".Сообщение об ошибке говорит вам, что вы пытаетесь использовать TR до того, как компилятор увидит определение для него.

0 голосов
/ 12 марта 2011

Я немного запутался с твоим 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?

...