私はある種の古典的なバイソン/フレックス計算機の実装問題に取り組んでいます。私が実行した問題は、変数の割り当てにあります。最初はうまくいくようです。参照できるのは宣言された変数のみで、割り当てた値を記憶しています...ただし、すべての変数がそれぞれ独自の値を持っているのではなく、単一の値を共有しているように見えます。したがって、「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");
}