gpt4 book ai didi

c++ - Bison 中哈希查找的问题

转载 作者:行者123 更新时间:2023-11-30 04:20:22 25 4
gpt4 key购买 nike

我正在研究一种经典的 bison/flex 计算器实现问题。我运行的问题是变量赋值。起初似乎有效;只能引用声明的变量,它会记住我分配的值...除了所有变量似乎共享一个值,而不是每个变量都有自己的值。因此,如果我执行“x=3;y=5;”那么 x 和 y 的值都是 5。

显然我做错了什么,但我不确定这是否是我对 bison、c++ 或 unordered_map 数据结构如何工作的理解失败。 (或者,所有 3 个)

我相信我已经包含了下面代码的所有相关部分,但如果有遗漏,请告诉我。

%{

#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;

unordered_map<string, double> dict;
%}

%union {
double dval;
char *sval;
}

%token <sval> VARIABLE
%token <dval> NUMBER
%type<dval> expr

%%

assign:
VARIABLE '=' expr {dict[$1] = $3; cout << $1<< "="<<dict[$1]<<endl; }
expr: VARIABLE {
if(dict.find($1) == dict.end())
{
yyerror("Bad Var");
}

最佳答案

你真的应该展示你的 flex 代码,但我猜相关的部分看起来像这样:

{id}     { yylval.sval = yytext; return VARIABLE; }

你需要做的是:

{id}     { yylval.sval = strdup(yytext); return VARIABLE; }

然后您需要通过在 bison 操作中使用分配的字符串后释放它来确保不会泄漏内存。

参见 the flex manualthe bison manual .

关于c++ - Bison 中哈希查找的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15333754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com