Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Интерпретатор / _sources / MyLanguage / PolizInterpreter
.hpp#ifndef POLIZINTERPRETER_HPP_
#define POLIZINTERPRETER_HPP_
#include <iostream>
#include <stack>
#include "Poliz.hpp"
#include "Errors.hpp"
namespace Parser_impl {
class PolizInterpreter{
PolizProgram* progr;
void invoke(int);
std::stack<PolizInstruction> exec_stack;
long double getValue(LookupTable<Variable>& local);
ElementTypes getType(LookupTable<Variable>& local);
void setValue(LookupTable<Variable>& local, long double);
PolizInstruction getInstruction(InstType type);
std::string getString();
public:
PolizInterpreter(PolizProgram* program) : progr(program) {}
int run()
{
try{
invoke(progr->main);
} catch (ParserException&){
throw;
} catch (int exit){
return exit;
} catch(...){
throw RuntimeException("Abnormal program termination");
}
if (exec_stack.size()!=1)
throw RuntimeException("Bad stack");
PolizInstruction i = exec_stack.top();
if (i.inst_type != TLiteral)
throw RuntimeException("Bad stack");
return int(exec_stack.top().value);
}
};
}
#endif /*POLIZINTERPRETER_HPP_*/
Соседние файлы в папке MyLanguage