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

时间:2015-01-14 17:04:35

标签: c++ c yacc lex

在我的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

1 个答案:

答案 0 :(得分:0)

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

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

...并在yacc文件中:

%union
{
    char *str;
...
}