如何在 yacc 中使用 yylval 和 union

how to use yylval with union in yacc

我对如何使用 %union{} 中定义的 yylval 感到困惑,当 yylvalint 时,我可以使用 </code> 和 <code> 对令牌的引用,但对于联合类型我不知道该怎么做。我在这里得到定义:

%union {
    int intval;
    double floatval;
    char *strval;
    int subtok;
}

例如,当yylval是这样的字符串时,我有一个规则

line: SELECT items'\n' { printf("select item %s\n", ); };

如何改为strval

要么在声明token的时候声明每个token的类型...

%token <strval> items

声明令牌后声明类型...

%type <strval> items

或者在抓取值的时候指定类型...

$<strval>2