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

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

本文关键字:变量名 yacc 错误 何使用 lex 编译      更新时间:2023-10-16

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