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

// Purpose:     Обработка ошибок

#ifndef _ERROR_HANDLER_
#define _ERROR_HANDLER_
//-----------------------------------------------------------------------------
#include <list>
#include <string>
//-----------------------------------------------------------------------------


enum ENUM_ERRORS
{
    ERR_UNKNOWN_SYMBOL,
    ERR_SYNTAX_ERROR,
    ERR_ID_UNDECLARED,
    ERR_ID_REDEFINITION,
    ERR_NON_NUMERICAL_TYPE,
    ERR_NON_BOOLEAN_TYPE,
    ERR_CONST_ASSIGN,
    ERR_TYPE_MISMATCH,
    ERR_UNTERM_STRING,      // Незаконченная строка
    ERR_NONCONST_EXPR,      // Неконстантное выражение
    ERR_TYPE_UNSUPPORTED,   // Операция не определена для данного типа
    ERR_OUT_OF_RANGE,
    ERR_STRING_TOO_LONG,
    
    ERR_QUANTITY
};

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

// Исключение, возбуждаемое при после обработки ошибки
class CCompilerException
{ };

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

struct CError
{
public:
    ENUM_ERRORS ErrNum;
    unsigned    LineNum;
    std::string Lexem;

    CError(ENUM_ERRORS error, unsigned line, std::string lex = "")
        : ErrNum(error), LineNum(line), Lexem(lex) { }
    CError() {}
};


class CErrorHandler
{
    std::list<CError> m_ErrorList;

    const char* ErrorDesc(ENUM_ERRORS ErrNum);
    
public:
    typedef std::list<CError>::iterator iterator;

    void Error(CError err) throw(CCompilerException);

    iterator begin() { return m_ErrorList.begin(); }
    iterator end()   { return m_ErrorList.end();   }

    void Reset()     { m_ErrorList.clear(); }

    unsigned ErrorsCount() { return m_ErrorList.size(); }
};

extern CErrorHandler g_ErrorHandler;

//-----------------------------------------------------------------------------
#endif

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