我在使用flex和bison构建的编译器中,将char*
作为YYSTYPE
使用。以下是相关代码:
#define YYSTYPE char*
这个语法文件的顶部有一个“is”。我的词法分析器中的一些标记需要将它们匹配的整个字符串传递给我的语法分析器,而其他标记只需要传递它们的标记,因此这对我很有用。我在我的词法分析器中做了这样的事情:
[(foo|bar)] {yylval = *strdup(yytext); return FOOBAR;}
在我的语法中,我使用它们来进行这样的产生:
fb:
FOOBAR
{
sprintf($$, "%s", &$1);
}
;
这将$$
的值设置为原始匹配令牌中的第一个字符。我(可能)明白为什么,因为解引用的char*
是char
,但我采取的修复步骤导致问题。例如,从sprintf()
行中删除&
会导致段错误。从赋值中删除*
会导致“使指针转换为整数”。我该怎么办?我认为问题在于对yylval
的赋值。
asprintf()
,它会分配更多的内存并导致另一个内存泄漏。此外,我在其他地方进行了内存释放。很抱歉没有包含那个,不想倾泻一堵墙的文字。问题是最后一件事...但我仍然收到那个警告。如何解决“使整数从指针转换而来而没有强制转换”的问题? - uristmcinternet