19#ifndef LLTUTORWINDOW_H
20#define LLTUTORWINDOW_H
22#include <QAbstractItemView>
25#include <QGraphicsColorizeEffect>
26#include <QGraphicsScene>
27#include <QGraphicsTextItem>
28#include <QGraphicsView>
29#include <QListWidgetItem>
33#include <QPropertyAnimation>
37#include <QTableWidget>
38#include <QTextDocument>
42#include <QTreeWidgetItem>
44#include <QtPrintSupport/QPrinter>
57enum class State {
A,
A1,
A2,
A_prime,
B,
B1,
B2,
B_prime,
C,
C_prime,
fin };
89 std::vector<std::unique_ptr<TreeNode>>
children;
101 QWidget* parent =
nullptr);
144 std::unordered_set<std::string>& first_set,
int depth,
145 std::unordered_set<std::string>& processing,
146 QTreeWidgetItem* parent);
148 std::unique_ptr<TreeNode>
150 std::unordered_set<std::string>& first_set,
int depth,
151 std::vector<std::pair<std::string, std::vector<std::string>>>&
156 void drawTree(
const std::unique_ptr<TreeNode>& root, QGraphicsScene* scene,
157 QPointF pos,
int hSpacing,
int vSpacing);
160 std::unique_ptr<TreeNode> root);
202 const QStringList& colHeaders);
204 void on_confirmButton_clicked();
205 void on_userResponse_textChanged();
213 QWidget::closeEvent(event);
216 bool eventFilter(QObject* obj, QEvent* event)
override;
220 Ui::LLTutorWindow* ui;
226 size_t currentRule = 0;
227 const unsigned kMaxHighlightTries = 3;
228 const unsigned kMaxTotalTries = 5;
229 unsigned lltries = 0;
230 unsigned cntRightAnswers = 0, cntWrongAnswers = 0;
232 using Cell = std::pair<QString, QString>;
233 std::vector<Cell> lastWrongCells;
236 QVector<QString> sortedNonTerminals;
237 QVector<QPair<QString, QVector<QString>>> sortedGrammar;
238 QString formattedGrammar;
240 QMap<QString, QMap<QString, QVector<QString>>> lltable;
241 QVector<QVector<QString>> rawTable;
242 QSet<QString> solutionSet;
248 bool isCorrect =
true;
249 MessageLog(
const QString& message,
bool isUser)
250 : message(message), isUser(isUser) {}
251 void toggleIsCorrect() { isCorrect =
false; }
254 QVector<MessageLog> conversationLog;
255 QWidget* lastUserMessage =
nullptr;
256 qsizetype lastUserMessageLogIdx = -1;
258 QMap<QString, QString> userCAB;
259 QMap<QString, QString> userSIG;
260 QMap<QString, QString> userSD;
263 std::vector<std::string> qvectorToStdVector(
const QVector<QString>& qvec);
264 QVector<QString> stdVectorToQVector(
const std::vector<std::string>& vec);
266 stdUnorderedSetToQSet(
const std::unordered_set<std::string>& uset);
267 std::unordered_set<std::string>
268 qsetToStdUnorderedSet(
const QSet<QString>& qset);
270 void setupTutorial();
275 QPropertyAnimation* m_shakeAnimation =
279 TutorialManager* tm =
nullptr;
281 QRegularExpression re{
"^\\s+|\\s+$"};
Definition ll1_parser.hpp:28
Dialog for filling and submitting an LL(1) parsing table.
Definition lltabledialog.h:41
void wrongAnimation()
Visual shake/flash for incorrect answer.
Definition lltutorwindow.cpp:548
QString feedbackForCPrime()
Definition lltutorwindow.cpp:1441
void showTableForCPrime()
Display the full LL(1) table in C' ex.
Definition lltutorwindow.cpp:342
void wrongUserResponseAnimation()
Animation specific to user chat input.
Definition lltutorwindow.cpp:580
void sessionFinished(int cntRight, int cntWrong)
QString TeachLL1Table()
Definition lltutorwindow.cpp:2096
~LLTutorWindow()
Definition lltutorwindow.cpp:99
void showTreeGraphics(std::unique_ptr< TreeNode > root)
Definition lltutorwindow.cpp:1866
void markLastUserIncorrect()
Marks last message as incorrect.
Definition lltutorwindow.cpp:675
void animateLabelColor(QLabel *label, const QColor &flashColor)
Definition lltutorwindow.cpp:645
void drawTree(const std::unique_ptr< TreeNode > &root, QGraphicsScene *scene, QPointF pos, int hSpacing, int vSpacing)
Definition lltutorwindow.cpp:1781
bool verifyResponseForB(const QString &userResponse)
Definition lltutorwindow.cpp:996
QString feedbackForA2()
Definition lltutorwindow.cpp:1229
LLTutorWindow(const Grammar &grammar, TutorialManager *tm=nullptr, QWidget *parent=nullptr)
Constructs the LL(1) tutor window with a given grammar.
Definition lltutorwindow.cpp:27
void showTable()
< Export chat to PDF
Definition lltutorwindow.cpp:430
void feedbackForB1TreeGraphics()
Definition lltutorwindow.cpp:1306
QString solutionForA1()
Definition lltutorwindow.cpp:1081
bool verifyResponseForA1(const QString &userResponse)
Definition lltutorwindow.cpp:988
QString feedbackForB2()
Definition lltutorwindow.cpp:1353
QString feedbackForB1()
Definition lltutorwindow.cpp:1318
bool verifyResponseForC()
Definition lltutorwindow.cpp:1026
void closeEvent(QCloseEvent *event) override
Definition lltutorwindow.h:211
void addWidgetMessage(QWidget *widget)
< Add text message to chat
Definition lltutorwindow.cpp:1445
QString solution(const std::string &state)
QString feedbackForA1()
Definition lltutorwindow.cpp:1219
bool verifyResponseForB1(const QString &userResponse)
Definition lltutorwindow.cpp:1006
bool verifyResponse(const QString &userResponse)
Definition lltutorwindow.cpp:950
QString TeachPredictionSymbols(const QString &ant, const production &conseq)
Definition lltutorwindow.cpp:2024
QString feedbackForAPrime()
Definition lltutorwindow.cpp:1255
void handleTableSubmission(const QVector< QVector< QString > > &raw, const QStringList &colHeaders)
Definition lltutorwindow.cpp:494
QString feedbackForA()
Definition lltutorwindow.cpp:1176
bool verifyResponseForA2(const QString &userResponse)
Definition lltutorwindow.cpp:992
void updateState(bool isCorrect)
Updates the tutor state after verifying user response.
Definition lltutorwindow.cpp:846
QString solutionForA2()
Definition lltutorwindow.cpp:1087
QSet< QString > solutionForB1()
Definition lltutorwindow.cpp:1104
QString feedback()
Definition lltutorwindow.cpp:1141
int computeSubtreeWidth(const std::unique_ptr< TreeNode > &node, int hSpacing)
Definition lltutorwindow.cpp:1769
QString TeachFollow(const QString &nt)
Definition lltutorwindow.cpp:1887
QStringList solutionForA()
Definition lltutorwindow.cpp:1073
void TeachFirstTree(const std::vector< std::string > &symbols, std::unordered_set< std::string > &first_set, int depth, std::unordered_set< std::string > &processing, QTreeWidgetItem *parent)
Definition lltutorwindow.cpp:1625
QString feedbackForC()
Definition lltutorwindow.cpp:1432
QSet< QString > solutionForB2()
Definition lltutorwindow.cpp:1127
QString FormatGrammar(const Grammar &grammar)
Formats a grammar for display in the chat interface.
Definition lltutorwindow.cpp:1474
void animateLabelPop(QLabel *label)
Definition lltutorwindow.cpp:610
bool verifyResponseForB2(const QString &userResponse)
Definition lltutorwindow.cpp:1016
QString feedbackForB()
Definition lltutorwindow.cpp:1265
bool verifyResponseForA(const QString &userResponse)
Definition lltutorwindow.cpp:983
QString feedbackForBPrime()
Definition lltutorwindow.cpp:1393
std::unique_ptr< TreeNode > buildTreeNode(const std::vector< std::string > &symbols, std::unordered_set< std::string > &first_set, int depth, std::vector< std::pair< std::string, std::vector< std::string > > > &active_derivations)
Definition lltutorwindow.cpp:1697
void exportConversationToPdf(const QString &filePath)
< Add widget (e.g., table, tree)
Definition lltutorwindow.cpp:103
void addMessage(const QString &text, bool isUser)
Definition lltutorwindow.cpp:243
void updateProgressPanel()
Definition lltutorwindow.cpp:205
QSet< QString > solutionForB()
Definition lltutorwindow.cpp:1096
bool eventFilter(QObject *obj, QEvent *event) override
Definition lltutorwindow.cpp:1827
void feedbackForB1TreeWidget()
Definition lltutorwindow.cpp:1452
QString generateQuestion()
Generates a question for the current state of the tutor.
Definition lltutorwindow.cpp:766
Manages interactive tutorials by highlighting UI elements and guiding the user.
Definition tutorialmanager.h:53
std::vector< std::string > production
Represents the right-hand side of a grammar rule.
Definition grammar.hpp:34
State
Definition lltutorwindow.h:57
@ C
Definition lltutorwindow.h:57
@ A1
Definition lltutorwindow.h:57
@ A
Definition lltutorwindow.h:57
@ B
Definition lltutorwindow.h:57
@ C_prime
Definition lltutorwindow.h:57
@ B2
Definition lltutorwindow.h:57
@ B_prime
Definition lltutorwindow.h:57
@ A2
Definition lltutorwindow.h:57
@ B1
Definition lltutorwindow.h:57
@ fin
Definition lltutorwindow.h:57
@ A_prime
Definition lltutorwindow.h:57
Represents a context-free grammar, including its rules, symbol table, and starting symbol.
Definition grammar.hpp:46
TreeNode structure used to build derivation trees.
Definition lltutorwindow.h:87
std::vector< std::unique_ptr< TreeNode > > children
Definition lltutorwindow.h:89
QString label
Definition lltutorwindow.h:88
Represents a state in the LR(0) automaton.
Definition state.hpp:33