Скачиваний:
11
Добавлен:
01.05.2014
Размер:
3.79 Кб
Скачать

// File:        Tetrads.cpp

#include "StdAfx.h"
#include "Tetrads.h"
#include <assert.h>
//-----------------------------------------------------------------------------

STetrad::STetrad(TET_OPERATION op, std::string op1, std::string op2, std::string res)
    : operation(op), operand1(op1), operand2(op2), result(res)
{ }

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

const char * STetrad::OperationToStr()
{
    switch(operation)
    {
        case TET_OP_DEF_LABEL:      return "DefLabel";
        case TET_OP_GOTO:           return "Goto";
        case TET_OP_GOTO_ZERO:      return "GotoIfZero";

        case TET_OP_ADD:            return "Plus";
        case TET_OP_SUBTRACT:       return "Minus";
        case TET_OP_MULT:           return "Mult";
        case TET_OP_DIV:            return "Div";
        case TET_OP_UMINUS:         return "Unary Minus";

        case TET_OP_ADD_F:          return "Plus FP";
        case TET_OP_SUBTRACT_F:     return "Minus FP";
        case TET_OP_MULT_F:         return "Mult FP";
        case TET_OP_DIV_F:          return "Div FP";
        case TET_OP_UMINUS_F:       return "Unary Minus FP";

        case TET_OP_REL_E:          return "Equal";
        case TET_OP_REL_G:          return "Greater";
        case TET_OP_REL_GE:         return "Greater or Equal";
        case TET_OP_REL_NE:         return "Not Equal";
        case TET_OP_REL_L:          return "Lesser";
        case TET_OP_REL_LE:         return "Lesser of Equal";

        case TET_OP_REL_E_F:        return "Equal FP";
        case TET_OP_REL_G_F:        return "Greater FP";
        case TET_OP_REL_GE_F:       return "Greater or Equal FP";
        case TET_OP_REL_NE_F:       return "Not Equal FP";
        case TET_OP_REL_L_F:        return "Lesser FP";
        case TET_OP_REL_LE_F:       return "Lesser of Equal FP";

        case TET_OP_ITOF:           return "ITOF";
        case TET_OP_CHAR_TO_STR:    return "Char to String";

        case TET_OP_AND:            return "And";
        case TET_OP_OR:             return "Or";
        case TET_OP_NOT:            return "Not";

        case TET_OP_ASSIGN_INT:     return "Assign int";
        case TET_OP_ASSIGN_ENUM:    return "Assign enum";
        case TET_OP_ASSIGN_FP:      return "Assign FP";
        case TET_OP_ASSIGN_CH:      return "Assign char";
        case TET_OP_ASSIGN_STR:     return "Assign string";
        case TET_OP_ASSIGN_BOOL:    return "Assign bool";
        case TET_OP_ASSIGN_STACK:   return "Assign stack";

        case TET_OP_READ_INT:       return "Read int";
        case TET_OP_READ_REAL:      return "Read real";
        case TET_OP_READ_CHAR:      return "Read char";
        case TET_OP_READ_STR:       return "Read str";

        case TET_OP_WRITE_INT:      return "Write int";
        case TET_OP_WRITE_REAL:     return "Write real";
        case TET_OP_WRITE_CHAR:     return "Write char";
        case TET_OP_WRITE_STR:      return "Write str";
        case TET_OP_WRITELN:        return "WriteLn";
            
        case TET_OP_INC_INT:        return "Inc integer";

        case TET_OP_STR_CONCAT:     return "Str concat";
            
        case TET_OP_STACK_PUSH:     return "Push";
        case TET_OP_STACK_TOP:      return "Top";
        case TET_OP_STACK_POP:      return "Pop";

        default:                
            assert(false);
            return "Error!";
    }
}

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

void STetrad::Print(char * pBuffer)
{
    sprintf(pBuffer, "%16s %10s %10s %10s", OperationToStr(),
            operand1.c_str(), operand2.c_str(), result.c_str());
}
Соседние файлы в папке Курсовая работа2