编译错误。如何使用 lex / yacc 解析变量名?
Compilation error. How to parse variable name using lex / yacc?
在我的 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;
...
}
在我的 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;
...
}