hoolang/src/HooCore.cpp

63 lines
1.4 KiB
C++

#include "HooCore.hpp"
HooCore::HooCore(const std::string &input, const std::string &moduleName) : _input(input), _moduleName(moduleName)
{
_input_stream = new antlr4::ANTLRInputStream(_input);
_lexer = new HooLexer(_input_stream);
_tokens = new antlr4::CommonTokenStream(_lexer);
_parser = new HooParser(_tokens);
_visitor = new Visitor(_moduleName);
}
HooCore::~HooCore()
{
delete _visitor;
delete _parser;
delete _tokens;
delete _lexer;
delete _input_stream;
}
std::any HooCore::compile()
{
try
{
antlr4::tree::ParseTree *tree = parse();
if (tree == nullptr)
{
std::cout << "Parse failed" << std::endl;
}
auto result = _visitor->visit(tree);
return result;
}
catch (const std::exception &e)
{
std::cerr << "Compilation Error: " << e.what() << std::endl;
return nullptr;
}
catch (...)
{
std::cerr << "Compilation Error: Unknown exception" << std::endl;
return nullptr;
}
}
antlr4::tree::ParseTree *HooCore::parse()
{
try
{
antlr4::tree::ParseTree *tree = _parser->unit();
return tree;
}
catch (const std::exception &e)
{
std::cerr << "Parse Error: " << e.what() << std::endl;
return nullptr;
}
catch (...)
{
std::cerr << "Parse Error: Unknown exception" << std::endl;
return nullptr;
}
}