我正在研究一种经典的 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");
}