结构类型的Yacc联合

时间:2016-10-13 18:59:36

标签: c bison yacc lex

我遇到这个问题,我的YACC文件似乎无法访问我的头文件中定义的类型。

如果我用%code requires{ }替换我的头文件,它确实识别它,但这不是我想要的。

我的st.h头文件:

struct node {
    int item;
    int identifier;
    struct node *left;
    struct node *middle;
    struct node *right;
};

typedef struct node NODE;
typedef NODE *TREE;

我的parser.y文件:

%{
#include <stdio.h>
#include <stdlib.h>
#include "st.h"
%}

%union {
    int value;
    TREE token;
}

Yacc(或C)给了我这个错误:

  

错误:未知类型名称'TREE'

我知道这很可能是我的错误,我非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

当您尝试编译其中包含#include "y.tab.h"的其他源文件(不是您的解析器文件)时,您(可能)会收到此错误。问题在于,由于您的%union使用了st.h中定义的类型,因此您需要在每个希望包含后者的文件中始终#include "st.h" #include "y.tab.h"