在 Lex 和 Yacc 之间传递指针

问题描述 投票:0回答:0

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

c yacc lex
© www.soinside.com 2019 - 2024. All rights reserved.