yacc - 字段类型不完整

时间:2011-10-03 19:49:02

标签: c bison yacc

当我的代币属于我定义的类型时,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'的类型不完整

在尝试编译由bison生成的代码时,在%union子句中的

行。在我的%union声明中,尝试通过编写spim_register reg;来声明reg会产生错误:

unknown type name ‘spim_register’

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

2 个答案:

答案 0 :(得分:10)

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

正如user786653暗示的那样,答案是here。我需要在.tab.h文件中包含定义我的自定义结构 的头文件,包括.l文件。

答案 1 :(得分:5)

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

包括“y.tab.h”

包括“FP.h”

然后,我重写了这样:

包括“FP.h”

包括“y.tab.h”

有效。非常感谢你。 @ArIck