当我的代币属于我定义的类型时,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
我得到了
在尝试编译由bison生成的代码时,在错误:字段'reg'的类型不完整
%union
子句中的行。在我的%union
声明中,尝试通过编写spim_register reg;
来声明reg会产生错误:
unknown type name ‘spim_register’
似乎%union { ... }
有一些特别之处,因为我能够在规则的操作中使用头文件中的数据结构。
答案 0 :(得分:10)
如果#includes
的顺序正确,那会有所帮助......
正如user786653暗示的那样,答案是here。我需要在.tab.h
文件中包含定义我的自定义结构 的头文件,包括.l
文件。
答案 1 :(得分:5)
我遇到了同样的问题。因为我的* .l文件是这样的:
然后,我重写了这样:
有效。非常感谢你。 @ArIck