← index
Codename.Quadtris/include/cmx_syntax.h
Source: Codename.Quadtris/include/cmx_syntax.h
#ifndef __SYNTAX_H__
#define __SYNTAX_H__

#include "cmx_scanner.h"
#include<map>

namespace symbol {
	using namespace lexer;
	enum { TYPE_TOKEN=1 };

	class SNode {
	public:
		Token *token;
		unsigned int type;		
		SNode() { token = 0; type = 0; }
		SNode(Token *token, unsigned int type) { this->token = token; this->type = type; }
	};
	
	class Symbol_Table {
	public:
		Symbol_Table();
		~Symbol_Table();
		SNode *input(Token *token);
		SNode *operator[](std::string temp_name) { return table[temp_name]; }
	protected:
		std::map<std::string, SNode *> table;
		
	};

	SNode *Symbol_Table::input(Token *token) {
		std::map<std::string, SNode *>::iterator it;
		it = table.find(token->t_text);
		if( it != table.end() ) {
			return it->second;
		}
		SNode *node = new SNode(token, TYPE_TOKEN);
		table[token->t_text] = node;
		return node ;
	}

	Symbol_Table::Symbol_Table() {

	}

	Symbol_Table::~Symbol_Table() {
		std::map<std::string, SNode*>::iterator it;
		for(it = table.begin(); it != table.end(); it++) {
			SNode *node = it->second;
			delete node;
		}
		table.erase(table.begin(), table.end());
	}
}

#endif