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+$"};
Implements an SLR(1) parser for context-free grammars.
Definition slr1_parser.hpp:38
QString feedback()
Definition slrtutorwindow.cpp:1679
bool verifyResponseForCB(const QString &userResponse)
Definition slrtutorwindow.cpp:1308
QString feedbackForD()
Definition slrtutorwindow.cpp:1887
QString solution(const std::string &state)
bool verifyResponseForC(const QString &userResponse)
Definition slrtutorwindow.cpp:1287
QString feedbackForD1()
Definition slrtutorwindow.cpp:1893
std::ptrdiff_t solutionForE()
Definition slrtutorwindow.cpp:1607
QSet< QString > solutionForFA()
Definition slrtutorwindow.cpp:1644
QString generateQuestion()
Generates a new question for the current tutor state.
Definition slrtutorwindow.cpp:793
std::unordered_set< Lr0Item > solutionForA4()
Definition slrtutorwindow.cpp:1543
bool verifyResponseForA3(const QString &userResponse)
Definition slrtutorwindow.cpp:1272
void wrongUserResponseAnimation()
Definition slrtutorwindow.cpp:604
QString solutionForD2()
Definition slrtutorwindow.cpp:1599
void exportConversationToPdf(const QString &filePath)
< Add message to chat
Definition slrtutorwindow.cpp:130
void updateProgressPanel()
Definition slrtutorwindow.cpp:405
void addUserState(unsigned id)
< Refresh visual progress
Definition slrtutorwindow.cpp:461
QSet< QString > solutionForG()
Definition slrtutorwindow.cpp:1660
void launchSLRWizard()
< Render SLR(1) table
bool verifyResponseForD2(const QString &userResponse)
Definition slrtutorwindow.cpp:1326
QString feedbackForA()
Definition slrtutorwindow.cpp:1745
bool verifyResponseForA(const QString &userResponse)
Definition slrtutorwindow.cpp:1259
bool verifyResponseForA1(const QString &userResponse)
Definition slrtutorwindow.cpp:1264
QString feedbackForG()
Definition slrtutorwindow.cpp:2158
QString TeachDeltaFunction(const std::unordered_set< Lr0Item > &items, const QString &symbol)
Definition slrtutorwindow.cpp:2494
bool verifyResponseForCA(const QString &userResponse)
Definition slrtutorwindow.cpp:1292
void markLastUserIncorrect()
Definition slrtutorwindow.cpp:700
QString feedbackForA3()
Definition slrtutorwindow.cpp:1767
QString solutionForA2()
Definition slrtutorwindow.cpp:1526
void addUserTransition(unsigned fromId, const std::string &symbol, unsigned toId)
< Register a user-created state
Definition slrtutorwindow.cpp:470
QString feedbackForD2()
Definition slrtutorwindow.cpp:1924
QString feedbackForE2()
Definition slrtutorwindow.cpp:2053
QString solutionForD1()
Definition slrtutorwindow.cpp:1595
QMap< unsigned, unsigned > solutionForE2()
Definition slrtutorwindow.cpp:1624
bool verifyResponseForA4(const QString &userResponse)
Definition slrtutorwindow.cpp:1277
std::unordered_set< Lr0Item > solutionForA()
Definition slrtutorwindow.cpp:1516
QString feedbackForA2()
Definition slrtutorwindow.cpp:1760
unsigned solutionForC()
Definition slrtutorwindow.cpp:1555
QString solutionForD()
Definition slrtutorwindow.cpp:1591
QString feedbackForCA()
Definition slrtutorwindow.cpp:1823
void wrongAnimation()
Definition slrtutorwindow.cpp:574
QString TeachClosure(const std::unordered_set< Lr0Item > &initialItems)
Definition slrtutorwindow.cpp:2421
QSet< unsigned > solutionForE1()
Definition slrtutorwindow.cpp:1614
bool verifyResponseForE(const QString &userResponse)
Definition slrtutorwindow.cpp:1330
void animateLabelPop(QLabel *label)
Definition slrtutorwindow.cpp:634
QSet< unsigned > solutionForF()
Definition slrtutorwindow.cpp:1637
QString feedbackForAPrime()
Definition slrtutorwindow.cpp:1799
bool verifyResponseForF(const QString &userResponse)
Definition slrtutorwindow.cpp:1373
QString solutionForA1()
Definition slrtutorwindow.cpp:1522
QString feedbackForA4()
Definition slrtutorwindow.cpp:1788
QString FormatGrammar(const Grammar &grammar)
Definition slrtutorwindow.cpp:2339
QString feedbackForF()
Definition slrtutorwindow.cpp:2061
bool verifyResponseForG(const QString &userResponse)
Definition slrtutorwindow.cpp:1397
bool verifyResponseForD1(const QString &userResponse)
Definition slrtutorwindow.cpp:1322
bool verifyResponseForB(const QString &userResponse)
Definition slrtutorwindow.cpp:1282
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:2439
QStringList solutionForCA()
Definition slrtutorwindow.cpp:1559
QString feedbackForE1()
Definition slrtutorwindow.cpp:2007
bool verifyResponseForFA(const QString &userResponse)
Definition slrtutorwindow.cpp:1387
std::vector< std::pair< std::string, std::vector< std::string > > > solutionForA3()
Definition slrtutorwindow.cpp:1531
QString feedbackForBPrime()
bool verifyResponseForD(const QString &userResponse)
Definition slrtutorwindow.cpp:1318
QString feedbackForFA()
Definition slrtutorwindow.cpp:2116
bool verifyResponseForE2(const QString &userResponse)
Definition slrtutorwindow.cpp:1351
QString feedbackForC()
Definition slrtutorwindow.cpp:1817
QString feedbackForDPrime()
Definition slrtutorwindow.cpp:1955
void sessionFinished(int cntRight, int cntWrong)
std::unordered_set< Lr0Item > solutionForCB()
Definition slrtutorwindow.cpp:1584
void animateLabelColor(QLabel *label, const QColor &flashColor)
Definition slrtutorwindow.cpp:669
void updateState(bool isCorrect)
Updates tutor state based on whether the last answer was correct.
Definition slrtutorwindow.cpp:1020
bool verifyResponse(const QString &userResponse)
Definition slrtutorwindow.cpp:1191
bool verifyResponseForE1(const QString &userResponse)
Definition slrtutorwindow.cpp:1336
bool verifyResponseForA2(const QString &userResponse)
Definition slrtutorwindow.cpp:1268
QString feedbackForB()
Definition slrtutorwindow.cpp:1809
QString feedbackForA1()
Definition slrtutorwindow.cpp:1753
QString feedbackForCB()
Definition slrtutorwindow.cpp:1882
QString feedbackForE()
Definition slrtutorwindow.cpp:2000
void showTable()
< Export full interaction
Definition slrtutorwindow.cpp:285
~SLRTutorWindow()
Definition slrtutorwindow.cpp:126
void fillSortedGrammar()
< Utility for displaying grammar
Definition slrtutorwindow.cpp:2376
void addMessage(const QString &text, bool isUser)
< Prepares grammar in display-friendly format
Definition slrtutorwindow.cpp:476
bool verifyResponseForH()
Definition slrtutorwindow.cpp:1408
void closeEvent(QCloseEvent *event) override
Definition slrtutorwindow.h:227
unsigned solutionForB()
Definition slrtutorwindow.cpp:1551
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
@ C
Definition lltutorwindow.h:57
@ A1
Definition lltutorwindow.h:57
@ A
Definition lltutorwindow.h:57
@ B
Definition lltutorwindow.h:57
@ A2
Definition lltutorwindow.h:57
@ fin
Definition lltutorwindow.h:57
@ A_prime
Definition lltutorwindow.h:57
StateSlr
Definition slrtutorwindow.h:51
@ H_prime
Definition slrtutorwindow.h:73
@ A4
Definition slrtutorwindow.h:56
@ 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
@ F
Definition slrtutorwindow.h:69
@ CB
Definition slrtutorwindow.h:61
@ H
Definition slrtutorwindow.h:72
@ D2
Definition slrtutorwindow.h:64
@ FA
Definition slrtutorwindow.h:70
@ 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