Rso's Jotter

日々の開発の知見のメモやその他雑記

計言語課題(作りかけ)

変数表を作る課題

変数を登録する部分だけ

変数表(もどき)は変数名.型名,有効範囲だけで良いとのこと
あとはソースから変数を登録しまくればいけるような気がする.

#include <iostream>
#include <string>
#include <map>

using namespace std;

typedef struct _VariableInfo{	//変数の情報
	string Type;	//型名
	string Scope;	//所属関数名
}VariableInfo;

class VariableTableClass{
	map<string,VariableInfo> m_VariableInfo;	//変数表 
public:
	int insert(string,VariableInfo);			//変数表に変数を登録する
	int search(string);							//変数表から変数を検索する
	int output();								//変数表に登録されている変数をすべて表示する
};

int VariableTableClass::insert(string sVariableName,VariableInfo vinfo){

	m_VariableInfo.insert(make_pair(sVariableName,vinfo));
	return 0;
}

int VariableTableClass::search(string sVariableName){
	map<string,VariableInfo>::iterator p;
	p = m_VariableInfo.find(sVariableName);
	if(p != m_VariableInfo.end()){	//変数が見つかった
		cout << "変数名:" << p->first << "\t型:" << p->second.Type << "\t有効範囲:" << p->second.Scope << endl;		
	}
	else{	//見つからなかった
		cout << sVariableName << "は登録されていません" << endl;
	}
	return 0;
}

int VariableTableClass::output(){
	map<string,VariableInfo>::iterator p;
	p = m_VariableInfo.begin();
	while(p != m_VariableInfo.end()){	//マップに登録されている変数をすべて表示する
		cout << "変数名:" << p->first << "\t型:" << p->second.Type << "\t有効範囲:" << p->second.Scope << endl;		
		p++;
	}
	return 0;
}


//適当に実験
int main(){
	VariableTableClass testclass;
	VariableInfo testinfo;
	string foo;

	testinfo.Scope = "グローバル";
	testinfo.Type = "int";
	foo = "testValue";

	testclass.insert(foo,testinfo);

	testinfo.Scope = "適当な関数名";
	testinfo.Type = "char";
	foo = "testValue2";

	testclass.insert(foo,testinfo); //登録

	testclass.search(foo);	//foo(testValue2)を検索
	cout << endl;

	foo = "aaa";

	testclass.search(foo);	//全然関係ない変数(aaa)を検索
	testclass.output();		//全部表示


	return 0;
}