yacc - 字段类型不完整

ArI*_*Ick 8 c yacc bison

当我的标记属于我定义的类型时,yacc似乎不喜欢.

在块中我的grammar(.y)文件的顶部%{ ... %},我包含一个定义以下结构的头文件:

typedef struct _spim_register {
    spim_register_type type; /* This is a simple enumeration, already defined */
    int number;              
} spim_register;
Run Code Online (Sandbox Code Playgroud)

在我的规则列表之前,我有:

%token AREG
...
%union {
struct _spim_register reg;
}
...
%type <reg> register AREG
Run Code Online (Sandbox Code Playgroud)

我明白了

错误:字段'reg'的类型不完整

%union尝试编译由bison生成的代码时,在子句中的行.在我的%union陈述中,尝试通过写入声明reg spim_register reg;给出错误:

unknown type name ‘spim_register’
Run Code Online (Sandbox Code Playgroud)

看起来有一些特别之处%union { ... },因为我能够在规则的操作中使用头文件中的数据结构.

ArI*_*Ick 10

如果我#includes的顺序正确,那会有所帮助......

正如user786653暗示的那样,答案就在这里.在将文件包含在文件中之前,我需要包含定义我的自定义结构的头文件..tab.h.l


fly*_*ain 6

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

包括"y.tab.h"

包括"FP.h"

然后,我重写了这样:

包括"FP.h"

包括"y.tab.h"

有用.非常感谢你.@ArIck