编译错误.如何使用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;
...
}
相关文章:
- 你能重载对象变量名本身返回的内容吗
- 在C/C++中将变量名定义为__00000001有什么好处吗
- C++变量名(可以将 main 声明为变量,但对于其他函数名称则不然)
- C++ - 声明中变量名后面的括号
- 如何使替换 c 函数的变量名成为错误?
- 是否可以创建没有变量名的变量
- fstream库,试图创建一个变量名为(c++)的文件
- 一个数组C++中的消息和变量名
- 在变量名后声明带有 () 的非内部类型与不使用变量名的行为不同。即 std::map<int,char>x(); - 这是怎么回事?
- 数组的变量名和该数组的地址有什么区别?
- 如何将变量名设置为字符串?C++
- 类中具有相同变量名的多重继承
- 如何在从.txt文件中读取时不重复相同的变量名
- 在循环中使用相同的变量名可以吗
- C++保留符号作为C变量名
- 在C++中,在给定的相同作用域内声明相同的变量名
- 为什么类名与"::"一起使用在变量名之前?
- 在同级之间继承相同的变量名
- __COUNTER__变量名中
- 按变量名遍历结构