当我的标记属于我定义的类型时,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 { ... },因为我能够在规则的操作中使用头文件中的数据结构.