在我的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;
...
}

10-06 02:42