main.cpp 2.6 KB

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