Rso's Jotter

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

計言語課題

USK氏の指摘を受けて簡単に修正できそうなとこを修正.動作は変わらず.

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

using namespace std;

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

class VariableTable{
	map<string,VariableInfo> m_VariableInfo;	//変数表 
public:
	int insert(string,VariableInfo);			//変数表に変数を登録する
	int search(string);							//変数表から変数を検索する
	int output();								//変数表に登録されている変数をすべて表示する
	friend ostream &operator<<(ostream &stream,VTABLEMAP::iterator p);
};

typedef map<string,VariableInfo> VTABLEMAP;	//長ったらしいのでtypedef

ostream &operator<<(ostream &stream,VTABLEMAP::iterator p){
	stream << "変数名:" << p->first << "\t型:" << p->second.Type << "\t有効範囲:" << p->second.Scope << endl;
	return stream;
}

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

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

int VariableTable::search(string sVariableName){
	const VTABLEMAP::iterator p = m_VariableInfo.find(sVariableName);
	if(p != m_VariableInfo.end()){	//変数が見つかった
		cout << p;		
	}
	else{	//見つからなかった
		cout << sVariableName << "は登録されていません" << endl;
	}
	return 0;
}

int VariableTable::output(){
	VTABLEMAP::iterator p = m_VariableInfo.begin();
	while(p != m_VariableInfo.end()){	//マップに登録されている変数をすべて表示する
		cout << p;		
		p++;
	}
	return 0;
}