Скачиваний:
11
Добавлен:
01.05.2014
Размер:
1.7 Кб
Скачать
#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