plsm-cpp/compiler/src/main.cpp

66 lines
1.5 KiB
C++

#include <fstream>
#include <iostream>
#include <istream>
#include <sstream>
#include "Analysis.h"
#include "Errors.h"
#include "Parser.h"
static std::string readFile(const std::string &path) {
std::ifstream f(path);
auto data = (std::stringstream() << f.rdbuf()).str();
f.close();
return data;
}
int main(int argc, char *argv[]) {
if (argc != 2) {
std::cout << "Usage:" << std::endl
<< "\t" << argv[0] << " <path/to/file>" << std::endl;
exit(EXIT_FAILURE);
}
auto input = readFile(argv[1]);
// std::cout << input << std::endl;
int exitStatus = EXIT_SUCCESS;
try {
auto module = plsm::parse(argv[1], input);
// std::cout << module->toJsonString() << std::endl;
plsm::performNameAnalysis(module);
plsm::performTypeAnalysis(module);
// std::cout << "\n\n";
// std::cout << plsm::ast::Module::fromJson(module->toJson())->toJson() <<
// std::endl;
} catch (std::runtime_error &err) {
if (strlen(err.what()) > 0)
std::cerr << err.what() << std::endl;
exitStatus = EXIT_FAILURE;
}
auto errors = plsm::errors::get();
for (size_t i = 0; i < errors.size(); i++) {
exitStatus = EXIT_FAILURE;
std::cerr << errors[i] << std::endl;
if (i != errors.size() - 1)
std::cerr << std::endl;
}
exit(exitStatus);
// auto module = Parser().parse(argv[1], readFile(argv[1]));
// auto fn = (ast::FnDef *)module->stmts.at(0);
// std::cout << fn->name << std::endl;
// delete module;
}