main.cpp 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. #include <iostream>
  2. #include <unistd.h>
  3. #include "Ast.h"
  4. #include "Semantic.h"
  5. #include "CodeGeneration.h"
  6. #include "Driver.h"
  7. extern std::unique_ptr<std::vector<std::unique_ptr<qlow::ast::Class>>> parsedClasses;
  8. extern FILE* qlow_parser_in;
  9. extern int qlow_parser_parse(void);
  10. int main(int argc, char** argv)
  11. {
  12. /*int c;
  13. while ((c = getopt(argc, argv, "c:")) != -1) {
  14. switch (c) {
  15. case 'c':
  16. printf("c: %s", optarg);
  17. break;
  18. default:
  19. printf("ay: %c\n", c);
  20. }
  21. }*/
  22. qlow::Driver driver(argc, argv);
  23. return driver.run();
  24. return 0;
  25. /*
  26. {
  27. const char* filename = argv[optind];
  28. try {
  29. ::qlow_parser_in = stdin;
  30. ::qlow_parser_in = fopen(filename, "r");
  31. if (!::qlow_parser_in)
  32. throw (std::string("File not found: ") + filename).c_str();
  33. ::qlow_parser_parse();
  34. std::cout << parsedClasses->size() << std::endl;
  35. std::cout << "parsing completed!" << std::endl;
  36. std::unique_ptr<qlow::sem::GlobalScope> semClasses =
  37. qlow::sem::createFromAst(*parsedClasses.get());
  38. for (auto& [a, b] : semClasses->classes) {
  39. std::cout << a << ": " << b->toString() << std::endl;
  40. }
  41. auto main = semClasses->classes.find("Main");
  42. qlow::sem::Class* mainClass = nullptr;
  43. if (main == semClasses->classes.end()) {
  44. throw "No Main class found!";
  45. }
  46. else {
  47. mainClass = main->second.get();
  48. }
  49. auto mainmain = mainClass->methods.find("main");
  50. qlow::sem::Method* mainMethod = nullptr;
  51. if (mainmain == mainClass->methods.end()) {
  52. //throw "No main method found inside Main class!";
  53. }
  54. else {
  55. mainMethod = mainmain->second.get();
  56. }
  57. std::cout << "starting code generation!" << std::endl;
  58. auto mod = qlow::gen::generateModule(semClasses->classes);
  59. qlow::gen::generateObjectFile("obj.o", std::move(mod));
  60. std::cout << "object exported!" << std::endl;
  61. }
  62. catch (qlow::sem::SemanticException& se)
  63. {
  64. std::cerr << se.getMessage() << std::endl;
  65. }
  66. catch (const std::string& err)
  67. {
  68. std::cerr << err << std::endl;
  69. }
  70. catch (const char* err)
  71. {
  72. std::cerr << err << std::endl;
  73. }
  74. catch (...)
  75. {
  76. std::cerr << "an unknown error occurred" << std::endl;
  77. }
  78. if (::qlow_parser_in != stdin)
  79. fclose(::qlow_parser_in);
  80. }
  81. for (auto&& c : *parsedClasses) {
  82. delete c.release();
  83. }*/
  84. }