Скачиваний:
12
Добавлен:
01.05.2014
Размер:
3.32 Кб
Скачать
// Purpose:     Определение типов данных для представление тетрад
//*****************************************************************************
#ifndef _TETRADES_H_
#define _TETRADES_H_
//-----------------------------------------------------------------------------
#include <string>
#include <vector>
//-----------------------------------------------------------------------------

// Операции промежуточного языка
enum TET_OPERATION
{
    // объявление метки
    TET_OP_DEF_LABEL,   
    // безусловный переход на метку
    TET_OP_GOTO,
    // условный переход, если аргумент равен нулю
    TET_OP_GOTO_ZERO,

    // Целочисленные операции
    TET_OP_ADD,
    TET_OP_SUBTRACT,
    TET_OP_MULT,
    TET_OP_DIV,
    TET_OP_UMINUS,

    // Операции с плавающей точкой
    TET_OP_ADD_F,
    TET_OP_SUBTRACT_F,
    TET_OP_MULT_F,
    TET_OP_DIV_F,
    TET_OP_UMINUS_F,

    // Целочисленное сравнение
    TET_OP_REL_E,
    TET_OP_REL_G,
    TET_OP_REL_GE,
    TET_OP_REL_NE,
    TET_OP_REL_L,
    TET_OP_REL_LE,

    // Целочисленное сравнение
    TET_OP_REL_E_F,
    TET_OP_REL_G_F,
    TET_OP_REL_GE_F,
    TET_OP_REL_NE_F,
    TET_OP_REL_L_F,
    TET_OP_REL_LE_F,

    // приведение целого к вещественному
    TET_OP_ITOF,
    TET_OP_CHAR_TO_STR,

    // Логические операции
    TET_OP_AND,
    TET_OP_OR,
    TET_OP_NOT,

    // Операции присваивания
    TET_OP_ASSIGN_INT,
    TET_OP_ASSIGN_ENUM,
    TET_OP_ASSIGN_FP,
    TET_OP_ASSIGN_CH,
    TET_OP_ASSIGN_STR,
    TET_OP_ASSIGN_BOOL,
    TET_OP_ASSIGN_STACK,    // ???

    // Операции ввода
    TET_OP_READ_INT,
    TET_OP_READ_REAL,
    TET_OP_READ_CHAR,
    TET_OP_READ_STR,

    // Операции вывода
    TET_OP_WRITE_INT,
    TET_OP_WRITE_REAL,
    TET_OP_WRITE_CHAR,
    TET_OP_WRITE_STR,
    TET_OP_WRITELN,

    // Инкремент целого числа
    TET_OP_INC_INT,

    // Конкатенация строк
    TET_OP_STR_CONCAT,
    
    // Операции со стеком
    TET_OP_STACK_PUSH,
    TET_OP_STACK_POP,
    TET_OP_STACK_TOP,

    TET_OP_QUANTITY
};

//-----------------------------------------------------------------------------
#define TET_STRING_LEN  127
//-----------------------------------------------------------------------------

struct STetrad
{
    TET_OPERATION   operation;
    std::string     operand1;
    std::string     operand2;
    std::string     result;

    //------------------------

    STetrad(TET_OPERATION op, std::string op1, std::string op2, std::string res);

    const char *OperationToStr();
    void Print(char * pBuffer);
};

//-----------------------------------------------------------------------------
// Структура данных для хранения тетрад, назовём её по старой доброй традиции "потоком" :)

class CTetradStream
{
public:
    typedef std::vector<STetrad>    t_container;
    typedef t_container::iterator   iterator;

private:
    t_container m_container;

public:    
    void Add(STetrad &tet)  { m_container.push_back(tet); }

    iterator begin()        { return m_container.begin(); }
    iterator end()          { return m_container.end();   }
    void     clear()        { m_container.clear();        }
};


//-----------------------------------------------------------------------------
#endif
Соседние файлы в папке Курсовая работа2