编译错误。如何使用 lex / yacc 解析变量名?

Compilation error. How to parse variable name using lex / yacc?

在我的 lex 文件中我有:

[a-zA-Z][a-zA-Z0-9]*
{
    yylval.val = _strdup(yytext); // <- error here
    yylval.length = yylen;
    return id;
}

... 用于解析 "myid2"

等文本

这导致编译错误:

error C2143: syntax error : missing ';' before '='

如何正确执行此操作以便我可以在 yacc 文件中将 id 作为字符串 (char *) 传递?

我正在使用 win_flex 和 win_bison。

更新: 我将语句放在 lex 文件的一行中:

[a-zA-Z][a-zA-Z0-9]* { yylval.val = _strdup(yytext); yylval.length = yylen; return id; }

现在我得到了编译错误:

error C2039: 'length' : is not a member of 'YYSTYPE'
error C2039: 'val' : is not a member of 'YYSTYPE'
error C2065: 'yylen' : undeclared identifier

我找到了解决这个问题的方法。 yylval的成员必须对应联合声明如下,在lex文件中:

[a-zA-Z][a-zA-Z0-9]* { yylval->str = _strdup(yytext); return id; }

...并且在 yacc 文件中:

%union
{
    char *str;
...
}