1#ifndef SLRTUTORWINDOW_H
2#define SLRTUTORWINDOW_H
4#include <QAbstractItemView>
7#include <QGraphicsColorizeEffect>
8#include <QListWidgetItem>
11#include <QPropertyAnimation>
13#include <QRegularExpression>
16#include <QTableWidget>
17#include <QTextDocument>
22#include <QtPrintSupport/QPrinter>
90 QWidget *parent =
nullptr);
109 void addMessage(
const QString &text,
bool isUser);
116 const std::string &symbol,
153 std::vector<std::pair<std::string, std::vector<std::string>>>
solutionForA3();
194 QString
TeachDeltaFunction(
const std::unordered_set<Lr0Item> &items,
const QString &symbol);
197 std::unordered_set<std::string> &visited,
200 QString
TeachClosure(
const std::unordered_set<Lr0Item> &initialItems);
202 void on_confirmButton_clicked();
203 void on_userResponse_textChanged();
212 QWidget::closeEvent(event);
217 std::vector<std::string> qvectorToStdVector(
const QVector<QString> &qvec);
218 QVector<QString> stdVectorToQVector(
const std::vector<std::string> &vec);
219 QSet<QString> stdUnorderedSetToQSet(
const std::unordered_set<std::string> &uset);
220 std::unordered_set<std::string> qsetToStdUnorderedSet(
const QSet<QString> &qset);
221 std::unordered_set<Lr0Item> ingestUserItems(
const QString &userResponse);
222 std::vector<std::pair<std::string, std::vector<std::string>>> ingestUserRules(
223 const QString &userResponse);
224 void setupTutorial();
226 Ui::SLRTutorWindow *ui;
232 QVector<QString> sortedNonTerminals;
233 QVector<QPair<QString, QVector<QString>>> sortedGrammar;
234 QString formattedGrammar;
236 unsigned cntRightAnswers = 0;
237 unsigned cntWrongAnswers = 0;
240 std::unordered_set<state> userMadeStates;
241 std::unordered_map<unsigned, std::unordered_map<std::string, unsigned>>
244 unsigned currentStateId = 0;
245 state currentSlrState;
247 QStringList followSymbols;
248 qsizetype currentFollowSymbolsIdx = 0;
249 unsigned int nextStateId = 0;
251 QVector<const state *> statesWithLr0Conflict;
252 std::queue<unsigned> conflictStatesIdQueue;
253 unsigned currentConflictStateId = 0;
254 state currentConflictState;
256 std::queue<unsigned> reduceStatesIdQueue;
257 unsigned currentReduceStateId = 0;
258 state currentReduceState;
262 enum Type { Shift, Reduce, Accept, Goto } type;
264 static ActionEntry makeShift(
int s) {
return {Shift, s}; }
265 static ActionEntry makeReduce(
int r) {
return {Reduce, r}; }
266 static ActionEntry makeAccept() {
return {Accept, 0}; }
267 static ActionEntry makeGoto(
int g) {
return {Goto, g}; }
270 QMap<int, QMap<QString, ActionEntry>> slrtable;
271 QVector<QVector<QString>> rawTable;
280 MessageLog(
const QString &message,
bool isUser)
285 void toggleIsCorrect() { isCorrect =
false; }
288 QVector<MessageLog> conversationLog;
289 QWidget *lastUserMessage =
nullptr;
290 qsizetype lastUserMessageLogIdx = -1;
292 QPropertyAnimation *m_shakeAnimation
297 QRegularExpression re{
"^\\s+|\\s+$"};
Implements an SLR(1) parser for context-free grammars.
Definition slr1_parser.hpp:20
QString feedback()
Definition slrtutorwindow.cpp:1988
bool verifyResponseForCB(const QString &userResponse)
Definition slrtutorwindow.cpp:1617
QString feedbackForD()
Definition slrtutorwindow.cpp:2195
QString solution(const std::string &state)
bool verifyResponseForC(const QString &userResponse)
Definition slrtutorwindow.cpp:1596
QString feedbackForD1()
Definition slrtutorwindow.cpp:2201
std::ptrdiff_t solutionForE()
Definition slrtutorwindow.cpp:1916
QSet< QString > solutionForFA()
Definition slrtutorwindow.cpp:1953
QString generateQuestion()
Generates a new question for the current tutor state.
Definition slrtutorwindow.cpp:1011
std::unordered_set< Lr0Item > solutionForA4()
Definition slrtutorwindow.cpp:1852
bool verifyResponseForA3(const QString &userResponse)
Definition slrtutorwindow.cpp:1581
void wrongUserResponseAnimation()
Definition slrtutorwindow.cpp:781
QString solutionForD2()
Definition slrtutorwindow.cpp:1908
void exportConversationToPdf(const QString &filePath)
< Add message to chat
Definition slrtutorwindow.cpp:112
void updateProgressPanel()
Definition slrtutorwindow.cpp:552
void addUserState(unsigned id)
< Refresh visual progress
Definition slrtutorwindow.cpp:611
QSet< QString > solutionForG()
Definition slrtutorwindow.cpp:1969
void launchSLRWizard()
< Render SLR(1) table
bool verifyResponseForD2(const QString &userResponse)
Definition slrtutorwindow.cpp:1635
QString feedbackForA()
Definition slrtutorwindow.cpp:2054
bool verifyResponseForA(const QString &userResponse)
Definition slrtutorwindow.cpp:1568
bool verifyResponseForA1(const QString &userResponse)
Definition slrtutorwindow.cpp:1573
QString feedbackForG()
Definition slrtutorwindow.cpp:2465
QString TeachDeltaFunction(const std::unordered_set< Lr0Item > &items, const QString &symbol)
Definition slrtutorwindow.cpp:2801
bool verifyResponseForCA(const QString &userResponse)
Definition slrtutorwindow.cpp:1601
void markLastUserIncorrect()
Definition slrtutorwindow.cpp:877
QString feedbackForA3()
Definition slrtutorwindow.cpp:2076
QString solutionForA2()
Definition slrtutorwindow.cpp:1835
void addUserTransition(unsigned fromId, const std::string &symbol, unsigned toId)
< Register a user-created state
Definition slrtutorwindow.cpp:620
QString feedbackForD2()
Definition slrtutorwindow.cpp:2232
QString feedbackForE2()
Definition slrtutorwindow.cpp:2361
QString solutionForD1()
Definition slrtutorwindow.cpp:1904
QMap< unsigned, unsigned > solutionForE2()
Definition slrtutorwindow.cpp:1933
bool verifyResponseForA4(const QString &userResponse)
Definition slrtutorwindow.cpp:1586
std::unordered_set< Lr0Item > solutionForA()
Definition slrtutorwindow.cpp:1825
QString feedbackForA2()
Definition slrtutorwindow.cpp:2069
unsigned solutionForC()
Definition slrtutorwindow.cpp:1864
QString solutionForD()
Definition slrtutorwindow.cpp:1900
QString feedbackForCA()
Definition slrtutorwindow.cpp:2132
void wrongAnimation()
Definition slrtutorwindow.cpp:751
QString TeachClosure(const std::unordered_set< Lr0Item > &initialItems)
Definition slrtutorwindow.cpp:2728
QSet< unsigned > solutionForE1()
Definition slrtutorwindow.cpp:1923
bool verifyResponseForE(const QString &userResponse)
Definition slrtutorwindow.cpp:1639
void animateLabelPop(QLabel *label)
Definition slrtutorwindow.cpp:811
QSet< unsigned > solutionForF()
Definition slrtutorwindow.cpp:1946
QString feedbackForAPrime()
Definition slrtutorwindow.cpp:2108
bool verifyResponseForF(const QString &userResponse)
Definition slrtutorwindow.cpp:1682
QString solutionForA1()
Definition slrtutorwindow.cpp:1831
QString feedbackForA4()
Definition slrtutorwindow.cpp:2097
QString FormatGrammar(const Grammar &grammar)
Definition slrtutorwindow.cpp:2646
QString feedbackForF()
Definition slrtutorwindow.cpp:2369
bool verifyResponseForG(const QString &userResponse)
Definition slrtutorwindow.cpp:1706
bool verifyResponseForD1(const QString &userResponse)
Definition slrtutorwindow.cpp:1631
bool verifyResponseForB(const QString &userResponse)
Definition slrtutorwindow.cpp:1591
SLRTutorWindow(const Grammar &g, TutorialManager *tm=nullptr, QWidget *parent=nullptr)
Constructs the SLR(1) tutor window with a given grammar.
Definition slrtutorwindow.cpp:8
void TeachClosureStep(std::unordered_set< Lr0Item > &items, unsigned int size, std::unordered_set< std::string > &visited, int depth, QString &output)
Definition slrtutorwindow.cpp:2746
QStringList solutionForCA()
Definition slrtutorwindow.cpp:1868
QString feedbackForE1()
Definition slrtutorwindow.cpp:2315
bool verifyResponseForFA(const QString &userResponse)
Definition slrtutorwindow.cpp:1696
std::vector< std::pair< std::string, std::vector< std::string > > > solutionForA3()
Definition slrtutorwindow.cpp:1840
QString feedbackForBPrime()
bool verifyResponseForD(const QString &userResponse)
Definition slrtutorwindow.cpp:1627
QString feedbackForFA()
Definition slrtutorwindow.cpp:2424
bool verifyResponseForE2(const QString &userResponse)
Definition slrtutorwindow.cpp:1660
QString feedbackForC()
Definition slrtutorwindow.cpp:2126
QString feedbackForDPrime()
Definition slrtutorwindow.cpp:2263
void sessionFinished(int cntRight, int cntWrong)
std::unordered_set< Lr0Item > solutionForCB()
Definition slrtutorwindow.cpp:1893
void animateLabelColor(QLabel *label, const QColor &flashColor)
Definition slrtutorwindow.cpp:846
void updateState(bool isCorrect)
Updates tutor state based on whether the last answer was correct.
Definition slrtutorwindow.cpp:1329
bool verifyResponse(const QString &userResponse)
Definition slrtutorwindow.cpp:1500
bool verifyResponseForE1(const QString &userResponse)
Definition slrtutorwindow.cpp:1645
bool verifyResponseForA2(const QString &userResponse)
Definition slrtutorwindow.cpp:1577
QString feedbackForB()
Definition slrtutorwindow.cpp:2118
QString feedbackForA1()
Definition slrtutorwindow.cpp:2062
QString feedbackForCB()
Definition slrtutorwindow.cpp:2190
QString feedbackForE()
Definition slrtutorwindow.cpp:2308
void showTable()
< Export full interaction
Definition slrtutorwindow.cpp:356
~SLRTutorWindow()
Definition slrtutorwindow.cpp:108
void fillSortedGrammar()
< Utility for displaying grammar
Definition slrtutorwindow.cpp:2683
void addMessage(const QString &text, bool isUser)
< Prepares grammar in display-friendly format
Definition slrtutorwindow.cpp:626
bool verifyResponseForH()
Definition slrtutorwindow.cpp:1717
void closeEvent(QCloseEvent *event) override
Definition slrtutorwindow.h:209
unsigned solutionForB()
Definition slrtutorwindow.cpp:1860
Manages interactive tutorials by highlighting UI elements and guiding the user.
Definition tutorialmanager.h:35
A queue that ensures each element is inserted only once.
Definition UniqueQueue.h:17
@ C
Definition lltutorwindow.h:39
@ A1
Definition lltutorwindow.h:39
@ A
Definition lltutorwindow.h:39
@ B
Definition lltutorwindow.h:39
@ A2
Definition lltutorwindow.h:39
@ fin
Definition lltutorwindow.h:39
@ A_prime
Definition lltutorwindow.h:39
StateSlr
Definition slrtutorwindow.h:33
@ H_prime
Definition slrtutorwindow.h:55
@ A4
Definition slrtutorwindow.h:38
@ E
Definition slrtutorwindow.h:48
@ CA
Definition slrtutorwindow.h:42
@ E1
Definition slrtutorwindow.h:49
@ D1
Definition slrtutorwindow.h:45
@ E2
Definition slrtutorwindow.h:50
@ A3
Definition slrtutorwindow.h:37
@ D_prime
Definition slrtutorwindow.h:47
@ F
Definition slrtutorwindow.h:51
@ CB
Definition slrtutorwindow.h:43
@ H
Definition slrtutorwindow.h:54
@ D2
Definition slrtutorwindow.h:46
@ FA
Definition slrtutorwindow.h:52
@ G
Definition slrtutorwindow.h:53
@ D
Definition slrtutorwindow.h:44
Represents a context-free grammar, including its rules, symbol table, and starting symbol.
Definition grammar.hpp:27
Represents a state in the LR(0) automaton.
Definition state.hpp:16