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