Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Курсовая работа2 / NameTables
.h#ifndef _NAMETABLES_INCLUDED_
#define _NAMETABLES_INCLUDED_
//-----------------------------------------------------------------------------
#include <string>
#include <map>
#include <cstdio>
#include "Tokens.h"
#include "Types.h"
//-----------------------------------------------------------------------------
struct VarInfo
{
TYPES type;
bool bLiter; // имя выделено под литерал?
unsigned index; // индекс в таблице (для литералов)
bool bTemp; // временная переменная ?
bool bFree; // временная п. уже была использована и её снова можно использовать ?
VarInfo() {}
VarInfo(TYPES t, bool isLiter, unsigned i, bool isTemp)
: type(t), bLiter(isLiter), index(i), bTemp(isTemp), bFree(false) { }
void Print(char *pBuffer)
{
sprintf(pBuffer, "%16s %10s %5u %10s", TypeToStr(type).c_str(),
(bLiter ? "Литерал" : ""), index, (bTemp ? "Временная" : ""));
}
};
//--------------------------------------
class CNameTable
{
public:
typedef std::map<std::string, VarInfo> t_container;
typedef t_container::iterator iterator;
private:
t_container m_container;
public:
VarInfo& operator [] (const std::string &ref) { return m_container[ref]; }
iterator begin() { return m_container.begin(); }
iterator end() { return m_container.end(); }
void clear() { m_container.clear(); }
bool find(const std::string &str) { return (m_container.find(str) != m_container.end()); }
};
//-----------------------------------------------------------------------------
#endif
Соседние файлы в папке Курсовая работа2