gpt4 book ai didi

c - 'YYSTYPE' 没有名为 '--' 的 union 类型成员

转载 作者:太空宇宙 更新时间:2023-11-03 23:29:05 26 4
gpt4 key购买 nike

我已将 YYSTYPE union 声明为

%union
{
char* stringValue;
union int_double_string* ids;
}

int_double_string 声明为

union int_double_string
{
short type; //0:int 1:double 2:string
int intValue;
double doubleValue;
char* stringValue;
};

一些代币

%token <stringValue> KEY
%token <int_double_string> VALUE
%token <stringValue> COMMENT
%type <stringValue> pair
%type <int_double_string> key_expr

但是无论我在哪里使用标记 VALUE,它都会给我一个常见的错误。

‘YYSTYPE’ has no member named ‘int_double_string’

pair:
KEY ws '=' ws VALUE {
char S5[15];
addPair($1, $5); //Error here and where-ever I use $5 in this function
...

虽然我已经正确声明了,但为什么会这样?我也在我的 lex 文件中使用了该变量。它在那里没有显示错误。

lex 文件

{integer}       {
yylval.ids = malloc(sizeof(union int_double_string));
yylval.ids->type = 0;
yylval.ids->intValue = atoi(yytext);
return VALUE;
}

我认为这与 union 中的 union 概念有关。

怎么办?

最佳答案

‘YYSTYPE’ has no member named ‘int_double_string’

%type <id>中的id和 %token <id>需要是 yyunion 中的一个字段.

因此,定义为 int_double_string 类型的标记需要是类型 id

%token <int_double_string> VALUE
%type <int_double_string> key_expr

像这样

%token <ids> VALUE
%type <ids> key_expr

addPair 的第二个参数应该是 union int_double_string*

在典型的 yacc 用法中,您将放置所有这些字段:

short type;     //0:int 1:double 2:string
int intValue;
double doubleValue;
char *stringVal;

进入 yyunion 本身并且在 yyunion 中没有 union 字段。我并不是说你不能,但这是不寻常的。

关于c - 'YYSTYPE' 没有名为 '--' 的 union 类型成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19891748/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com