我遇到这个问题,我的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'
我知道这很可能是我的错误,我非常感谢任何帮助。
答案 0 :(得分:1)
当您尝试编译其中包含#include "y.tab.h"
的其他源文件(不是您的解析器文件)时,您(可能)会收到此错误。问题在于,由于您的%union
使用了st.h
中定义的类型,因此您需要在每个希望包含后者的文件中始终#include "st.h"
#include "y.tab.h"
。