我的 .l 文件中有正则表达式,它获取一个变量名。我通过一个函数运行该名称以获取它的指针,然后尝试返回该指针。在 lex 和 yacc 之间的转换中,指针以某种方式发生了变化。当我在检测字符串时做同样的事情时,这不会发生:
\"([^"]+)\" yylval = removeQuotes(yytext); return STRING;
[a-z_][a-z0-9_]* yylval = returnVar(yytext); return VAR;
%%
long removeQuotes(char* str)
{
int i;
for (i=1; str[i]!='\0'; i++){
str[i-1] = str[i];
}
str[i-2] = '\0';
return (long)str;
}
long returnVar(char* name){
return (long)name;
}
STRING 有效并且允许我在我的程序中使用我喜欢的字符串。 VAR没有正确传递指向yacc的指针,所以当我尝试用指针去抓取yacc中的变量名字符串时,显然找不到相同的字符串。有谁知道为什么它没有像我预期的那样传递指针?对 removeQuotes 中的输入进行更改是否会影响指针?
示例: returnVar 传递指针 39035008 yacc 显示 39051408