19#ifndef SLRTUTORWINDOW_H
20#define SLRTUTORWINDOW_H
26#include <QAbstractItemView>
29#include <QGraphicsColorizeEffect>
30#include <QListWidgetItem>
33#include <QPropertyAnimation>
35#include <QRegularExpression>
38#include <QTableWidget>
39#include <QTextDocument>
44#include <QtPrintSupport/QPrinter>
106 QWidget* parent =
nullptr);
126 void addMessage(
const QString& text,
bool isUser);
128 const QString& filePath);
171 std::vector<std::pair<std::string, std::vector<std::string>>>
214 const QString& symbol);
215 void TeachClosureStep(std::unordered_set<Lr0Item>& items,
unsigned int size,
216 std::unordered_set<std::string>& visited,
int depth,
218 QString
TeachClosure(
const std::unordered_set<Lr0Item>& initialItems);
220 void on_confirmButton_clicked();
221 void on_userResponse_textChanged();
229 QWidget::closeEvent(event);
234 std::vector<std::string> qvectorToStdVector(
const QVector<QString>& qvec);
235 QVector<QString> stdVectorToQVector(
const std::vector<std::string>& vec);
237 stdUnorderedSetToQSet(
const std::unordered_set<std::string>& uset);
238 std::unordered_set<std::string>
239 qsetToStdUnorderedSet(
const QSet<QString>& qset);
240 std::unordered_set<Lr0Item> ingestUserItems(
const QString& userResponse);
241 std::vector<std::pair<std::string, std::vector<std::string>>>
242 ingestUserRules(
const QString& userResponse);
243 void setupTutorial();
245 Ui::SLRTutorWindow* ui;
251 QVector<QString> sortedNonTerminals;
252 QVector<QPair<QString, QVector<QString>>> sortedGrammar;
253 QString formattedGrammar;
255 unsigned cntRightAnswers = 0;
256 unsigned cntWrongAnswers = 0;
259 std::unordered_set<state> userMadeStates;
260 std::unordered_map<unsigned, std::unordered_map<std::string, unsigned>>
264 unsigned currentStateId = 0;
265 state currentSlrState;
267 QStringList followSymbols;
268 qsizetype currentFollowSymbolsIdx = 0;
269 unsigned int nextStateId = 0;
271 QVector<const state*> statesWithLr0Conflict;
272 std::queue<unsigned> conflictStatesIdQueue;
273 unsigned currentConflictStateId = 0;
274 state currentConflictState;
278 unsigned currentReduceStateId = 0;
279 state currentReduceState;
282 enum Type { Shift, Reduce, Accept, Goto } type;
284 static ActionEntry makeShift(
int s) {
return {Shift, s}; }
285 static ActionEntry makeReduce(
int r) {
return {Reduce, r}; }
286 static ActionEntry makeAccept() {
return {Accept, 0}; }
287 static ActionEntry makeGoto(
int g) {
return {Goto, g}; }
290 QMap<int, QMap<QString, ActionEntry>> slrtable;
291 QVector<QVector<QString>> rawTable;
297 bool isCorrect =
true;
299 MessageLog(
const QString& message,
bool isUser)
300 : message(message), isUser(isUser) {}
302 void toggleIsCorrect() { isCorrect =
false; }
305 QVector<MessageLog> conversationLog;
306 QWidget* lastUserMessage =
nullptr;
307 qsizetype lastUserMessageLogIdx = -1;
309 QPropertyAnimation* m_shakeAnimation =
315 QRegularExpression re{
"^\\s+|\\s+$"};
316 const QRegularExpression kWhitespace{
"\\s+"};
Implements an SLR(1) parser for context-free grammars.
Definition slr1_parser.hpp:38
QString feedback()
Definition slrtutorwindow.cpp:1700
bool verifyResponseForCB(const QString &userResponse)
Definition slrtutorwindow.cpp:1317
QString feedbackForD()
Definition slrtutorwindow.cpp:1908
QString solution(const std::string &state)
bool verifyResponseForC(const QString &userResponse)
Definition slrtutorwindow.cpp:1296
QString feedbackForD1()
Definition slrtutorwindow.cpp:1914
std::ptrdiff_t solutionForE()
Definition slrtutorwindow.cpp:1628
QSet< QString > solutionForFA()
Definition slrtutorwindow.cpp:1665
QString generateQuestion()
Generates a new question for the current tutor state.
Definition slrtutorwindow.cpp:794
std::unordered_set< Lr0Item > solutionForA4()
Definition slrtutorwindow.cpp:1562
bool verifyResponseForA3(const QString &userResponse)
Definition slrtutorwindow.cpp:1281
void wrongUserResponseAnimation()
Definition slrtutorwindow.cpp:605
QString solutionForD2()
Definition slrtutorwindow.cpp:1620
void exportConversationToPdf(const QString &filePath)
< Add message to chat
Definition slrtutorwindow.cpp:130
void updateProgressPanel()
Definition slrtutorwindow.cpp:406
void addUserState(unsigned id)
< Refresh visual progress
Definition slrtutorwindow.cpp:462
QSet< QString > solutionForG()
Definition slrtutorwindow.cpp:1681
void launchSLRWizard()
< Render SLR(1) table
bool verifyResponseForD2(const QString &userResponse)
Definition slrtutorwindow.cpp:1345
QString feedbackForA()
Definition slrtutorwindow.cpp:1766
bool verifyResponseForA(const QString &userResponse)
Definition slrtutorwindow.cpp:1268
bool verifyResponseForA1(const QString &userResponse)
Definition slrtutorwindow.cpp:1273
QString feedbackForG()
Definition slrtutorwindow.cpp:2179
QString TeachDeltaFunction(const std::unordered_set< Lr0Item > &items, const QString &symbol)
Definition slrtutorwindow.cpp:2526
bool verifyResponseForCA(const QString &userResponse)
Definition slrtutorwindow.cpp:1301
void markLastUserIncorrect()
Definition slrtutorwindow.cpp:701
QStringList solutionForD()
Definition slrtutorwindow.cpp:1610
QString feedbackForA3()
Definition slrtutorwindow.cpp:1788
QString solutionForA2()
Definition slrtutorwindow.cpp:1545
void addUserTransition(unsigned fromId, const std::string &symbol, unsigned toId)
< Register a user-created state
Definition slrtutorwindow.cpp:471
QString feedbackForD2()
Definition slrtutorwindow.cpp:1945
QString feedbackForE2()
Definition slrtutorwindow.cpp:2074
QString solutionForD1()
Definition slrtutorwindow.cpp:1616
QMap< unsigned, unsigned > solutionForE2()
Definition slrtutorwindow.cpp:1645
bool verifyResponseForA4(const QString &userResponse)
Definition slrtutorwindow.cpp:1286
std::unordered_set< Lr0Item > solutionForA()
Definition slrtutorwindow.cpp:1535
QString feedbackForA2()
Definition slrtutorwindow.cpp:1781
unsigned solutionForC()
Definition slrtutorwindow.cpp:1574
QString feedbackForCA()
Definition slrtutorwindow.cpp:1844
void wrongAnimation()
Definition slrtutorwindow.cpp:575
QString TeachClosure(const std::unordered_set< Lr0Item > &initialItems)
Definition slrtutorwindow.cpp:2453
QSet< unsigned > solutionForE1()
Definition slrtutorwindow.cpp:1635
bool verifyResponseForE(const QString &userResponse)
Definition slrtutorwindow.cpp:1349
void animateLabelPop(QLabel *label)
Definition slrtutorwindow.cpp:635
QSet< unsigned > solutionForF()
Definition slrtutorwindow.cpp:1658
QString feedbackForAPrime()
Definition slrtutorwindow.cpp:1820
bool verifyResponseForF(const QString &userResponse)
Definition slrtutorwindow.cpp:1392
QString solutionForA1()
Definition slrtutorwindow.cpp:1541
QString feedbackForA4()
Definition slrtutorwindow.cpp:1809
QString FormatGrammar(const Grammar &grammar)
Definition slrtutorwindow.cpp:2371
QString feedbackForF()
Definition slrtutorwindow.cpp:2082
bool verifyResponseForG(const QString &userResponse)
Definition slrtutorwindow.cpp:1416
bool verifyResponseForD1(const QString &userResponse)
Definition slrtutorwindow.cpp:1341
bool verifyResponseForB(const QString &userResponse)
Definition slrtutorwindow.cpp:1291
SLRTutorWindow(const Grammar &g, TutorialManager *tm=nullptr, QWidget *parent=nullptr)
Constructs the SLR(1) tutor window with a given grammar.
Definition slrtutorwindow.cpp:26
void TeachClosureStep(std::unordered_set< Lr0Item > &items, unsigned int size, std::unordered_set< std::string > &visited, int depth, QString &output)
Definition slrtutorwindow.cpp:2471
QStringList solutionForCA()
Definition slrtutorwindow.cpp:1578
QString feedbackForE1()
Definition slrtutorwindow.cpp:2028
bool verifyResponseForFA(const QString &userResponse)
Definition slrtutorwindow.cpp:1406
std::vector< std::pair< std::string, std::vector< std::string > > > solutionForA3()
Definition slrtutorwindow.cpp:1550
QString feedbackForBPrime()
bool verifyResponseForD(const QString &userResponse)
Definition slrtutorwindow.cpp:1327
QString feedbackForFA()
Definition slrtutorwindow.cpp:2137
bool verifyResponseForE2(const QString &userResponse)
Definition slrtutorwindow.cpp:1370
QString feedbackForC()
Definition slrtutorwindow.cpp:1838
QString feedbackForDPrime()
Definition slrtutorwindow.cpp:1976
void sessionFinished(int cntRight, int cntWrong)
std::unordered_set< Lr0Item > solutionForCB()
Definition slrtutorwindow.cpp:1603
void animateLabelColor(QLabel *label, const QColor &flashColor)
Definition slrtutorwindow.cpp:670
void updateState(bool isCorrect)
Updates tutor state based on whether the last answer was correct.
Definition slrtutorwindow.cpp:1029
bool verifyResponse(const QString &userResponse)
Definition slrtutorwindow.cpp:1200
bool verifyResponseForE1(const QString &userResponse)
Definition slrtutorwindow.cpp:1355
bool verifyResponseForA2(const QString &userResponse)
Definition slrtutorwindow.cpp:1277
QString feedbackForB()
Definition slrtutorwindow.cpp:1830
QString feedbackForA1()
Definition slrtutorwindow.cpp:1774
QString feedbackForCB()
Definition slrtutorwindow.cpp:1903
QString feedbackForE()
Definition slrtutorwindow.cpp:2021
void showTable()
< Export full interaction
Definition slrtutorwindow.cpp:285
~SLRTutorWindow()
Definition slrtutorwindow.cpp:126
void fillSortedGrammar()
< Utility for displaying grammar
Definition slrtutorwindow.cpp:2408
void addMessage(const QString &text, bool isUser)
< Prepares grammar in display-friendly format
Definition slrtutorwindow.cpp:477
bool verifyResponseForH()
Definition slrtutorwindow.cpp:1427
void closeEvent(QCloseEvent *event) override
Definition slrtutorwindow.h:227
unsigned solutionForB()
Definition slrtutorwindow.cpp:1570
Manages interactive tutorials by highlighting UI elements and guiding the user.
Definition tutorialmanager.h:53
A queue that ensures each element is inserted only once.
Definition UniqueQueue.h:37
StateSlr
Definition slrtutorwindow.h:51
@ H_prime
Definition slrtutorwindow.h:73
@ A4
Definition slrtutorwindow.h:56
@ C
Definition slrtutorwindow.h:59
@ A1
Definition slrtutorwindow.h:53
@ E
Definition slrtutorwindow.h:66
@ CA
Definition slrtutorwindow.h:60
@ E1
Definition slrtutorwindow.h:67
@ D1
Definition slrtutorwindow.h:63
@ E2
Definition slrtutorwindow.h:68
@ A3
Definition slrtutorwindow.h:55
@ D_prime
Definition slrtutorwindow.h:65
@ A
Definition slrtutorwindow.h:52
@ F
Definition slrtutorwindow.h:69
@ CB
Definition slrtutorwindow.h:61
@ B
Definition slrtutorwindow.h:58
@ H
Definition slrtutorwindow.h:72
@ D2
Definition slrtutorwindow.h:64
@ A2
Definition slrtutorwindow.h:54
@ FA
Definition slrtutorwindow.h:70
@ fin
Definition slrtutorwindow.h:74
@ A_prime
Definition slrtutorwindow.h:57
@ G
Definition slrtutorwindow.h:71
@ D
Definition slrtutorwindow.h:62
Represents a context-free grammar, including its rules, symbol table, and starting symbol.
Definition grammar.hpp:46
Represents a state in the LR(0) automaton.
Definition state.hpp:33