在我的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 '='
如何正确执行此操作以便我可以将id作为字符串(char *)传递到yacc文件中?
我正在使用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
答案 0 :(得分:0)
我找到了解决这个问题的方法。 yylval的成员必须在lex文件中对应于union声明:
[a-zA-Z][a-zA-Z0-9]* { yylval->str = _strdup(yytext); return id; }
...并在yacc文件中:
%union
{
char *str;
...
}