From d84e7d9cd4cae8044db9c9252e9952abda139eff Mon Sep 17 00:00:00 2001 From: jorenchik Date: Sat, 21 Sep 2024 17:45:01 +0300 Subject: [PATCH] reimplemented all the go project files --- src/cpp/include/api.h | 2 +- src/cpp/include/parser.h | 12 +- .../index/main.cpp.6DE93E662B25E657.idx | Bin 6222 -> 13886 bytes src/cpp/qtapp/CMakeLists.txt | 2 + src/cpp/qtapp/main.cpp | 319 ++++++++++++++++-- .../clangd/index/api.cpp.00DF3E88855FBE2C.idx | Bin 602 -> 1732 bytes .../index/main.cpp.3110054129CACA6D.idx | Bin 1716 -> 1808 bytes .../index/parser.cpp.1DA6C31FD012A889.idx | Bin 7778 -> 7792 bytes src/cpp/transpiler/CMakeLists.txt | 17 +- src/cpp/transpiler/api.cpp | 10 +- src/cpp/transpiler/main.cpp | 9 +- src/cpp/transpiler/parser.cpp | 5 + 12 files changed, 319 insertions(+), 57 deletions(-) diff --git a/src/cpp/include/api.h b/src/cpp/include/api.h index d5c75c1..a14c13e 100644 --- a/src/cpp/include/api.h +++ b/src/cpp/include/api.h @@ -1,4 +1,4 @@ #include "result.h" #include "parser.h" -Result> Transpile(std::string fileContent); +Result> Transpile(std::string fileContent, bool debug); diff --git a/src/cpp/include/parser.h b/src/cpp/include/parser.h index 022afec..610f5a6 100644 --- a/src/cpp/include/parser.h +++ b/src/cpp/include/parser.h @@ -6,37 +6,31 @@ #include "lexer.h" #include "result.h" -class Question { -public: +struct Question { virtual std::string ToString() const = 0; virtual ~Question() = default; }; -// Choice struct for Multiple Choice Questions struct Choice { std::string Answer; bool IsCorrect; }; -class SingleAnswerQuestion : public Question { -public: +struct SingleAnswerQuestion : public Question { std::string ID; std::string QuestionText; std::string Answer; std::string Section; - // Override ToString method std::string ToString() const override; }; -class MultipleChoiceQuestion : public Question { -public: +struct MultipleChoiceQuestion : public Question { std::string ID; std::string QuestionText; std::vector Choices; std::string Section; - // Override ToString method std::string ToString() const override; }; diff --git a/src/cpp/qtapp/.cache/clangd/index/main.cpp.6DE93E662B25E657.idx b/src/cpp/qtapp/.cache/clangd/index/main.cpp.6DE93E662B25E657.idx index 97f0579aad09bb9a2c2ac519b3d231afba44edd3..1d9bd4f44f2a81eb637f5a0280b05a5c3b4a4c9f 100644 GIT binary patch literal 13886 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 literal 6222 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 diff --git a/src/cpp/qtapp/CMakeLists.txt b/src/cpp/qtapp/CMakeLists.txt index 2b7d0e6..0e0c272 100644 --- a/src/cpp/qtapp/CMakeLists.txt +++ b/src/cpp/qtapp/CMakeLists.txt @@ -16,4 +16,6 @@ add_executable( MdemoryApp main.cpp ) + target_link_libraries(MdemoryApp Qt5::Widgets api) +target_include_directories(MdemoryApp PRIVATE ${CMAKE_SOURCE_DIR}/include) diff --git a/src/cpp/qtapp/main.cpp b/src/cpp/qtapp/main.cpp index 6b8cc0a..b9aa857 100644 --- a/src/cpp/qtapp/main.cpp +++ b/src/cpp/qtapp/main.cpp @@ -1,3 +1,14 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + #include #include #include @@ -16,8 +27,10 @@ #include #include #include +#include #include "api.h" +#include "parser.h" struct Page { int start; @@ -33,7 +46,6 @@ public: QToolButton *showButton; int labelCount; - // Method to show or hide back labels void showBacklabels() { for (int i = 0; i < backLabels.size(); ++i) { if (i < labelCount) { @@ -48,7 +60,6 @@ public: } } - // Constructor to create an Mdem object Mdem() { wMdem = new QWidget(); QVBoxLayout *vMdem = new QVBoxLayout(); @@ -62,6 +73,7 @@ public: QHBoxLayout *hFront = new QHBoxLayout(); wFront->setMinimumHeight(60); wFront->setLayout(hFront); + wFront->setProperty("first", "true"); wMdem->setStyleSheet(QString( "QWidget#%1 > QWidget {" "border-right: 1px solid gray;" @@ -117,16 +129,41 @@ public: } }; -QLabel *deckListLabel; -QVBoxLayout *hMdemScroll; -QSpacerItem *mdemSpacer; -QList mdems; -QString workingPath = "/home/jorenchik/Code/mdemory/memorybase"; -void CreateMdems(QList& questions) { - if (mdemSpacer) { - hMdemScroll->removeItem(mdemSpacer); - } +QString workingPath = "/home/jorenchik/Code/mdemory/memorybase"; +QList mdems = QList(); +std::vector questions = std::vector(); +QLabel *deckListLabel; +QVBoxLayout *hMdemScroll; +QSpacerItem *mdemSpacer; + +const int PER_PAGE = 8; +int currentPage = -1; +std::vector pages; +QToolButton* prevButton; +QToolButton* firstButton; +QToolButton* lastButton; +QToolButton* nextButton; +QList paginationButtons; +QLabel* paginationLabel; + +const std::regex doubleSpaceExp( + " ", + std::regex_constants::ECMAScript | std::regex_constants::icase +); + +const std::regex tabExp( + "\t", + std::regex_constants::ECMAScript | std::regex_constants::icase +); + +const std::regex newLineExp( + "\n", + std::regex_constants::ECMAScript | std::regex_constants::icase +); + +void CreateMdems(std::vector& questions) { + hMdemScroll->removeItem(mdemSpacer); for (Mdem *mdem : mdems) { if (mdem->wMdem->isVisible()) { @@ -134,18 +171,146 @@ void CreateMdems(QList& questions) { } } - // TODO + if (questions.size() > mdems.size()) { + auto amount = questions.size() - mdems.size(); + for (size_t i = 0; i < amount; ++i) { + auto mdem = new Mdem(); + mdems.append(mdem); + hMdemScroll->addWidget(mdem->wMdem); + } + } + + auto transformAnswer = [](std::string answer) -> std::string { + answer = std::regex_replace(answer, doubleSpaceExp, " "); + answer = std::regex_replace(answer, tabExp, ""); + answer = std::regex_replace(answer, newLineExp, ""); + return answer; + }; + + for (size_t i = 0; i < questions.size(); ++i) { + if (SingleAnswerQuestion* sa = dynamic_cast(questions[i])) { + mdems[i]->wFrontText->setText(QString::fromStdString(sa->QuestionText)); + auto answer = sa->Answer; + answer = transformAnswer(answer); + answer = std::format("- {}", answer); + mdems[i]->backLabels[0]->setText(QString::fromStdString(answer)); + if (mdems[i]->wBack->isVisible()) { + mdems[i]->wBack->hide(); + } + mdems[i]->labelCount = 1; + } else if (MultipleChoiceQuestion* mw = dynamic_cast(questions[i])) { + mdems[i]->wFrontText->setText( + QString::fromStdString(mw->QuestionText) + ); + auto choices = mw->Choices; + for (size_t k = 0; k < choices.size(); ++k) { + auto answer = choices[k].Answer; + answer = transformAnswer(answer); + answer = std::format("- {}", answer); + if (k < mdems[i]->backLabels.size()) { + mdems[i]->backLabels[k]->setText(QString::fromStdString(answer)); + } else { + auto label = new QLabel(); + label->setText(QString::fromStdString(answer)); + mdems[i]->backLabels.push_back(label); + mdems[i]->wBack->layout()->addWidget(label); + } + } + mdems[i]->labelCount = choices.size(); + } + if (!mdems[i]->wMdem->isVisible()) { + mdems[i]->wMdem->show(); + } + } + + hMdemScroll->addItem(mdemSpacer); } -void SwitchPage(int pageIdx, QList& pages, QList& mdems) { - for (Mdem *mdem : mdems) { +const int DISTANCE = 2; + + +void makePages() { + pages.clear(); + auto len = questions.size(); + for (int i = 0; i < (len / PER_PAGE) + 1; i++) { + auto startingIndex = PER_PAGE * i ; + auto amount = PER_PAGE; + if (i == questions.size() / PER_PAGE) { + amount = questions.size() % PER_PAGE; + } + pages.push_back(Page{startingIndex, startingIndex + amount}); + } +} + + +void SwitchPage(int pageIdx) { + currentPage = pageIdx; + + // Hide all pagination buttons + for (auto& button : paginationButtons) { + button->hide(); + } + + int l = 0; + char buffer[50]; + snprintf(buffer, sizeof(buffer), "Page: %d", pageIdx + 1); + paginationLabel->setText(buffer); + + // Hide widgets in mdems + for (auto& mdem : mdems) { if (mdem->wBack->isVisible()) { mdem->wBack->hide(); mdem->showButton->setText("Show"); } } - // TODO + // Update pagination buttons + for (int k = -DISTANCE; k <= DISTANCE; ++k) { + if (pageIdx + k >= 0 && pageIdx + k < pages.size()) { + auto button = paginationButtons[l]; + snprintf(buffer, sizeof(buffer), "%d", pageIdx + k + 1); + button->setText(buffer); + + if (pageIdx + k != pageIdx) { + button->show(); + } else { + button->hide(); + } + ++l; + } + } + + // Handle first and last buttons + if (pageIdx > 0 && pages.size() > 1) { + firstButton->show(); + } else { + firstButton->hide(); + } + + if (pageIdx < pages.size() - 1 && pages.size() > 1) { + lastButton->show(); + } else { + lastButton->hide(); + } + + // Handle next and previous buttons + if (!pages.empty() && currentPage < pages.size() - 1) { + nextButton->show(); + } else { + nextButton->hide(); + } + + if (!pages.empty() && currentPage >= 1) { + prevButton->show(); + } else { + prevButton->hide(); + } + + // Handle page slice + const Page& page = pages[pageIdx]; + + std::vector pageSlice(questions.begin() + page.start, questions.begin() + page.end); + CreateMdems(pageSlice); } int main(int argc, char *argv[]) { @@ -154,45 +319,74 @@ int main(int argc, char *argv[]) { QSplitter *hSplitter = new QSplitter(); + // LeftSide - QWidget *leftWidget = new QWidget(); - QVBoxLayout *leftLayout = new QVBoxLayout(); - QLabel *mdemLabel = new QLabel("Mdems"); - QFileSystemModel *model = new QFileSystemModel(); - QTreeView *mdemList = new QTreeView(); + QWidget *leftWidget = new QWidget(); + QVBoxLayout *leftLayout = new QVBoxLayout(); + QLabel *mdemLabel = new QLabel("Mdems"); + QFileSystemModel *model = new QFileSystemModel(); + QTreeView *mdemList = new QTreeView(); + mdemSpacer = new QSpacerItem(50, 50, QSizePolicy::Minimum, QSizePolicy::Expanding); leftWidget->setLayout(leftLayout); leftLayout->addWidget(mdemLabel); model->setRootPath(workingPath); mdemList->setModel(model); + QObject::connect( + mdemList, + &QTreeView::doubleClicked, + [model](const QModelIndex &index) { + auto fileInfo = model->fileInfo(index); + auto path = fileInfo.filePath().toStdString(); + auto file = std::ifstream(path); + std::string content; + if (file) { + std::stringstream buffer; + buffer << file.rdbuf(); + content = buffer.str(); + auto parseRes = Transpile(content, true); + for (auto question: questions) { + delete question; + } + questions.clear(); + questions = parseRes.value; + makePages(); + SwitchPage(0); + } else { + std::cout << std::format("Could not open the file: {}", path) << std::endl; + } + } + ); - QModelIndex rootIndex = model->index("/home/jorenchik/Code/mdemory/memorybase"); + QModelIndex rootIndex = model->index( + "/home/jorenchik/Code/mdemory/memorybase" + ); mdemList->setRootIndex(rootIndex); leftLayout->addWidget(mdemList); // DeckList - QLabel *deckLabel = new QLabel("Decks"); - QListView *deckList = new QListView(); + QLabel *deckLabel = new QLabel("Decks"); + QListView *deckList = new QListView(); leftLayout->addWidget(deckLabel); leftLayout->addWidget(deckList); // RightSide - QWidget *rightWidget = new QWidget(); + QWidget *rightWidget = new QWidget(); QVBoxLayout *rightLayout = new QVBoxLayout(); rightWidget->setLayout(rightLayout); - QWidget *top = new QWidget(); + QWidget *top = new QWidget(); QHBoxLayout *hTop = new QHBoxLayout(); - deckListLabel = new QLabel("Mdem: todo.mdem"); + deckListLabel = new QLabel("Mdem: todo.mdem"); top->setLayout(hTop); rightLayout->addWidget(top); hTop->addWidget(deckListLabel); hTop->addStretch(1); - QToolButton *refresh = new QToolButton(); + QToolButton *refresh = new QToolButton(); QToolButton *practice = new QToolButton(); - QToolButton *shuffle = new QToolButton(); + QToolButton *shuffle = new QToolButton(); hTop->addWidget(refresh); hTop->addWidget(shuffle); @@ -204,13 +398,14 @@ int main(int argc, char *argv[]) { practice->setText("Practice"); // Mdems - QScrollArea *mdemScroll = new QScrollArea(); - QWidget *mdemContainer = new QWidget(); + QScrollArea *mdemScroll = new QScrollArea(); + QWidget *mdemContainer = new QWidget(); hMdemScroll = new QVBoxLayout(); mdemScroll->setWidget(mdemContainer); mdemScroll->setWidgetResizable(true); mdemContainer->setLayout(hMdemScroll); rightLayout->addWidget(mdemScroll); + hMdemScroll->addItem(mdemSpacer); // Pagination hSplitter->addWidget(leftWidget); @@ -218,6 +413,70 @@ int main(int argc, char *argv[]) { hSplitter->setStretchFactor(0, 1); hSplitter->setStretchFactor(1, 3); + + auto pagination = new QWidget(); + auto hPagination = new QHBoxLayout(); + pagination->setLayout(hPagination); + + firstButton = new QToolButton(); + firstButton->setText(QString::fromStdString("<<")); + hPagination->addWidget(firstButton); + firstButton->hide(); + QObject::connect(firstButton, &QToolButton::clicked, [](bool checked) { + if (pages.size() > 0) { + SwitchPage(0); + } + }); + + prevButton = new QToolButton(); + prevButton->setText(QString::fromStdString("<")); + hPagination->addWidget(prevButton); + prevButton->hide(); + QObject::connect(prevButton, &QToolButton::clicked, [](bool checked) { + if (pages.size() > 0) { + SwitchPage(currentPage - 1); + } + }); + + for (int i = 0; i < PER_PAGE; i++) { + auto elButton = new QToolButton(); + elButton->setText(QString("%1").arg(i+1)); + hPagination->addWidget(elButton); + elButton->hide(); + QObject::connect(elButton, &QToolButton::clicked, [elButton](bool checked) { + auto pageNum = std::stoi(elButton->text().toStdString().c_str()); + auto pageIdx = pageNum - 1; + if (pageIdx < pages.size()) { + SwitchPage(pageIdx); + } + }); + paginationButtons.push_back(elButton); + } + + nextButton = new QToolButton(); + nextButton->setText(QString::fromStdString(">")); + hPagination->addWidget(nextButton); + nextButton->hide(); + QObject::connect(nextButton, &QToolButton::clicked, [](bool checked) { + if (pages.size() > 0) { + SwitchPage(currentPage + 1); + } + }); + + lastButton = new QToolButton(); + lastButton->setText(QString::fromStdString(">>")); + hPagination->addWidget(lastButton); + lastButton->hide(); + QObject::connect(lastButton, &QToolButton::clicked, [](bool checked) { + if (pages.size() > 0) { + SwitchPage(pages.size() - 1); + } + }); + hPagination->addStretch(1); + paginationLabel = new QLabel(); + hPagination->addWidget(paginationLabel); + rightLayout->addWidget(pagination); + window.setCentralWidget(hSplitter); window.show(); return app.exec(); diff --git a/src/cpp/transpiler/.cache/clangd/index/api.cpp.00DF3E88855FBE2C.idx b/src/cpp/transpiler/.cache/clangd/index/api.cpp.00DF3E88855FBE2C.idx index 09ba8d1a5bc3f3697006a4297c66df0c052ab296..023458354fc50da40300b6bdfeccf5e5569d5484 100644 GIT binary patch literal 1732 zcmYjQ3rtgI6uxb53vK`2w$R!qw=bl$1zM3Y2u6GX)(xD9FEVjx5k^~eEzYVq5;Ph` zWZ>%1YNVoWxQL(xoUaTv3FxAv0`Y}T*Te@CM4j))ZoB-q{>i=hzH`6x_|G{v*PNMo zhJhf{EoPU!sH_l05F~kSicAZtSO#`dNSt)Ir$ch}Py z8=G5-$||IbPF>Hp^v-mY=-!REA01*2GpeiOcAtK6@XeUTkzBED?y&2jR+A^Z$=+%` zD%Za#m;AZEuB|_xA-~wXZnC!cLuUaa>}o1=diqIzT2f(SYV(ovm7A7$2RU6U?O(L! z+X^2o?ptMRTZ>x7E$wt~{XZ#nk40|Z<(Geff2~z}^;$9WU0-xk$?9V9<}d39Zl`7C zPSke}_A7thSJL2}Zz$2-@Uh}e=6UBo#ATEV;~Q&~8L9cob87G9vUyD_T4(O^FRp!) z;`+w<-X9?_buVb`*TTXglu z#-7KQ?tFTw?|r}R+oun2`8URUhKBxlclu`fbh)P-Oit^n(OFJZ-8wtl-!nRJXZ@rp z$>uv9y55G#mD_d}?AHCJtCZ;%&0d;#bR^@G+PJaK4u`bkPYH-fqJ*)VcEA|W?I8ycgN7df_`?#SN`mz>?0gR zO$gXVc9H^3M$t0UCX5Szf95CK_UPK5S; z?Ibz{;26M2v-gg*`dVoUgNg?0g*QNh*Mk>MmE*jE@QW%cz{TNW42A@FOn3~*N}KYK zOmnf8ND#@5ltEE+j=Hz(9(sA1h_p6n;G+Vn?$RKI&*RNPvxi zRw^qv*HA;a6fOfMx4LZC9IuuiBO(bSgkoq0xJIBM*XS@da{O@3FD*1;Nby`#NW?Sn z5<<*qFp_Lx`%vyucUNnmJqSjogWFHk6j=RGO?(QU6v2oTR&f2H$biq#EZ61vh*IS& zIR~l$t_ON9WD_3@renS{R|0t>F><6QGu^J{Dfg~YP~5~a;ZVK(;I5&SDZ8UXUZ>;EHz070Z7 zs0=|x2u6jVDg-4Yq~KN3#)V4`))a-Sl#(c!Tp>l4*)29Mp};s?lnxkS;Vd4LP2(W{ E0UxwhumAu6 literal 602 zcmWIYbaM-0VqkDi@vO*AElFfyU|+`NHV!W&H53i!4)SN_+pNfl;i}gVa zJ`e!`0x$*x13#R}%)3*&x9g4JGZtokJ^_a0+>{((7%^~iaWOHovvRYrF>(L^5|*`w diff --git a/src/cpp/transpiler/.cache/clangd/index/main.cpp.3110054129CACA6D.idx b/src/cpp/transpiler/.cache/clangd/index/main.cpp.3110054129CACA6D.idx index b22bbed514a63ee53542edf0fbb2c7dee35ca565..edfaa5d4a05c57f30640d2e5a16f8ad2b63547b0 100644 GIT binary patch literal 1808 zcmY*a4NwzD6uu-Ea(B7AY%YIFFbT%NkfI5M1OXMqGa~p?fmUg)l}acG*lD6P)>cMl ztk_zArbg>;)zR3>X#547T9rC7f)*U0mO73VX-nx?E9z9GbnJ$9FS;|gv)}i=_xA03 zdv|#=+-^dKVN;7|_$xijif|0WIQaOMdCN>94AV+5%)e{*+$&2i+Cf+Qqv8Xfc4qC} zlq*?nc>msUOGopq*KDs=Wj{MtK1dyu9XeKeskFpsK6tw0hGX}pqT)9uKGYXf-Odr^jGt);tg4T_ysmHak)LaB1vl^N;0nu{cZ{w2a?-$G z?|D=wPKuViGctC!CF_)PtmQgWe~}vB-SxEnQODA&tv9pwUX+RdaQCMTR&EOh3qxJ| zTRd$Aa%pkDyM?GaeZTMUqQkT-$G)>+X-KCw*Ht$p6^@dgl{Ge(99uK9I`AOm zeD;+w{?4?=D|$j_Zhkj7MSLUuq-$K`9$#zj=l-hs?$$E$>HO(#{kE6mZGF^dd520? zZYdoadiVEH1+{dSZ$;%>lVQDT+v87XTLMiqro%80jYkv16SNGE@?icM)z=q#X>0^E zlQgLwo{-t=De(=$(!0~^4*WU#dy$9+6iF$OSF7HChxD^j5e|}7$y&76<7?Kj^nJiW zwVah}kh;yhvbJV&zCug`^K^4AQqzEsr8?<*)?`yyHnM+UX$MIfG039CI#|UR;RCT z+mV?L)x3@uf}9_p|3%U-pJYO{L+2Qc)Uo{wx=t?QXNqwUCyx`d#DPU_5zySu_UzkB zAI*WjTDg`(Mak}}i>`dq`8uR&mKG`-Pc6+(m_2VHOdwI5NTHpYawaaD*wkAdR=emF z6y#z3JidF{IbZm2V!ITn54DXfRX&-p9MZ|UaG(GR9SVX2IMflO zXY?B6Vp(gDbxxeB^@6(bHq@BPiT{PUNIMvZkkGa^dC zQ#gdYo{FOI*U;x(?0Yl3(1fS|h8is}5wH&Q^vpQw|3RkGsI{C@G5oXo->wvNm^QLh cM3$<^a&cvGMc6_!j95b9(kOzJks>+vFG;~~ssI20 literal 1716 zcmWIYbaPw7#=zj5;#rZKT9U}Zz`!5`#Kk2=nTCuE40_BA3>9!CKdb&%UUC{1a*Nr6oepTE z&b%_2Gq8NW_HC7Ws%Pc~JJ}tTtDfFkSn%&f)TtMfADh)In_iV1{!J`6$4+34dBP`& zGF|`Bt#Jnzojg5fPWucG@9ihHC4_VDU*8ZMmZS7I=ia}QvM(1t_{n~B+Ex9vYaEm( z9mtpFxZL^V$r#^cCelt$6ZF^@_&novo5PTPqzkW*OA0KDqdk%L-MPU>dP8|37`xZ?Cnc<;%nl&ikCqaC@rHeV*(~%(pR){CwedL-^0rw z2$Ys$mEsa%;$aeG-~=k*7hn`&?KrQw)k9(xu%D_vz|s9%?KsqIyDl zA}~cjp1htS5>HD{2f_0c@`S5Y@l!f>viPzQ3y-J_uZ$8bVt7Pld1aMgvB)E8EN%=p zfJf9+)D-SB!FubSbF&<*fuZ6l?g@8TRA%A5{Q{M)cwN79l3mgJFB{y@LR9f(%$3av zELyxf+#F7gE?LI=B5htvGIs< zv2t<46aje(TxtlO0H**yf+xr+h{RK1Q-FJlN7RJfgcoLb?*|2GJ_o@Wz%Z0ikhSn2%thK%ar~5iE@Zqm0Rz9cGeF$FlwR|2$p=3>7_IJ$MpZ#`kX1vi{W@fEF0* z85_b>14Bi}R3FCEpZD;Zp-tOPyfF#Ou|QXVvMa(Bs?4e!Fq8g#vOOkJV{ia1ZeY@k zTqv2i({AQ^-9JS~fvUwg#rR;sw}dlt+cvpr7l6VZLLTt+CePPs*~xL{AyAlCm{$R& z8b$-%1u6y*?lO@vQGr>!KJVHh#=8pt@cOVQH760Iy|^g3I3C211Q8G*0b?*Qi|Qq< zc#!mB>I8OiNeL-25n%?nr3?&WaCHn)2&OQCDUM(!=ceTF1GzlByiCkoEUauCeC(Wz G+zbHzEHd%{ diff --git a/src/cpp/transpiler/.cache/clangd/index/parser.cpp.1DA6C31FD012A889.idx b/src/cpp/transpiler/.cache/clangd/index/parser.cpp.1DA6C31FD012A889.idx index 6231dc15d6c08c32d1a061518233e6a933af72e1..8e42f308c15a9078cb9a0a2d51d00bc836291664 100644 GIT binary patch literal 7792 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 Ow8PCL3oCOpO!t4!%wu=} diff --git a/src/cpp/transpiler/CMakeLists.txt b/src/cpp/transpiler/CMakeLists.txt index c6b2cb3..ca3fafb 100644 --- a/src/cpp/transpiler/CMakeLists.txt +++ b/src/cpp/transpiler/CMakeLists.txt @@ -1,22 +1,21 @@ # Set sources -set(SOURCES +set( + SOURCES main.cpp +) + +add_library( + api lexer.cpp parser.cpp time.cpp api.cpp ) - -#include_directories(${CMAKE_SOURCE_DIR}/include) -add_library(api api.cpp) - -# Add the executable (CLI) add_executable(transpiler ${SOURCES}) -target_compile_options(transpiler PRIVATE -Wall -Wextra -Wpedantic) +target_link_libraries(transpiler api) -#add_library(api api.cpp) -#target_link_libraries(transpiler PRIVATE api) +target_compile_options(transpiler PRIVATE -Wall -Wextra -Wpedantic) target_include_directories(transpiler PRIVATE ${CMAKE_SOURCE_DIR}/include) target_include_directories(api PUBLIC ${CMAKE_SOURCE_DIR}/include) diff --git a/src/cpp/transpiler/api.cpp b/src/cpp/transpiler/api.cpp index bbcc7c1..43f7d3f 100644 --- a/src/cpp/transpiler/api.cpp +++ b/src/cpp/transpiler/api.cpp @@ -6,9 +6,17 @@ #include "lexer.h" #include "parser.h" #include "time.h" +#include "config.h" -Result> Transpile(std::string fileContent) { +bool debug; +std::chrono::high_resolution_clock::time_point start; +std::chrono::high_resolution_clock::time_point end; + +Result> Transpile(std::string fileContent, bool isDebug) { start = std::chrono::high_resolution_clock::now(); + end = std::chrono::high_resolution_clock::now(); + debug = isDebug; + auto lexRes = TokenizeMdem(fileContent); auto tokens = lexRes.value; if (lexRes.error.length() > 0) { diff --git a/src/cpp/transpiler/main.cpp b/src/cpp/transpiler/main.cpp index c5fac80..86ae4aa 100644 --- a/src/cpp/transpiler/main.cpp +++ b/src/cpp/transpiler/main.cpp @@ -5,7 +5,6 @@ #include #include "time.h" -#include "config.h" #include "api.h" std::string readFile(const std::string& filePath) { @@ -24,14 +23,11 @@ std::string readFile(const std::string& filePath) { return content; } -bool debug = false; - -std::chrono::high_resolution_clock::time_point start; -std::chrono::high_resolution_clock::time_point end; int main(int argc, char* argv[]) { std::string filePath; + bool debug = false; if (argc == 3) { auto option = std::string(argv[1]); if (option == "--debug") { @@ -49,12 +45,11 @@ int main(int argc, char* argv[]) { } try { - start = std::chrono::high_resolution_clock::now(); std::string fileContent = readFile(filePath); end = std::chrono::high_resolution_clock::now(); ShowTime("I/O time"); - auto res = Transpile(fileContent); + auto res = Transpile(fileContent, debug); auto questions = res.value; if (res.error.length() > 0) { std::cout << std::format( diff --git a/src/cpp/transpiler/parser.cpp b/src/cpp/transpiler/parser.cpp index 0ab7607..ce6f46e 100644 --- a/src/cpp/transpiler/parser.cpp +++ b/src/cpp/transpiler/parser.cpp @@ -139,6 +139,10 @@ Result ValidateGrammar(const std::vector& tokens) { Result> ParseQuestions(const std::vector& tokens) { auto questions = std::vector(); + if (tokens.size() == 0) { + return {questions, ""}; + } + auto result = ValidateGrammar(tokens); if (result.error.length() > 0) { return { @@ -152,6 +156,7 @@ Result> ParseQuestions(const std::vector& tokens) std::string section; size_t i = 0; + debug = true; if (debug) { std::cout << "SECTION: Parser output:\n"; }