yacc似乎不喜欢我的标记是我定义的类型。
在%{ ... %}
块中的语法(.y
)文件的顶部,我包含了一个头文件,它定义了以下结构:
typedef struct _spim_register {
spim_register_type type; /* This is a simple enumeration, already defined */
int number;
} spim_register;
在我的规则列表之前,我有:
%token AREG
...
%union {
struct _spim_register reg;
}
...
%type <reg> register AREG
我明白
错误:字段“reg”的类型不完整
在我的%union
语句中,试图通过写spim_register reg;
来声明reg,会出现错误:
unknown type name ‘spim_register’
看起来%union { ... }
有一些特别之处,因为我能够在规则的操作中使用头文件中的数据结构。
2条答案
按热度按时间o8x7eapl1#
如果我的
#includes
的顺序正确就会有帮助...正如user786653所暗示的那样,答案是here。我需要在将
.tab.h
文件包含到.l
文件中之前**包含定义自定义结构的头文件。zi8p0yeb2#
我遇到了同样的问题。因为我的
*.l
文件是这样的:我把它改写成这样:
它的工作。