yacc -字段的类型不完整

olmpazwi  于 2023-04-19  发布在  其他
关注(0)|答案(2)|浏览(158)

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 { ... }有一些特别之处,因为我能够在规则的操作中使用头文件中的数据结构。

o8x7eapl

o8x7eapl1#

如果我的#includes的顺序正确就会有帮助...
正如user786653所暗示的那样,答案是here。我需要在将.tab.h文件包含到.l文件中之前**包含定义自定义结构的头文件。

zi8p0yeb

zi8p0yeb2#

我遇到了同样的问题。因为我的*.l文件是这样的:

#include "y.tab.h"
#include "FP.h"

我把它改写成这样:

#include "FP.h"
#include "y.tab.h"

它的工作。

相关问题