4#include <QAbstractItemView>
7#include <QGraphicsColorizeEffect>
8#include <QGraphicsScene>
9#include <QGraphicsTextItem>
10#include <QGraphicsView>
11#include <QListWidgetItem>
15#include <QPropertyAnimation>
19#include <QTableWidget>
20#include <QTextDocument>
24#include <QTreeWidgetItem>
26#include <QtPrintSupport/QPrinter>
39enum class State {
A,
A1,
A2,
A_prime,
B,
B1,
B2,
B_prime,
C,
C_prime,
fin };
72 std::vector<std::unique_ptr<TreeNode>>
children;
84 QWidget *parent =
nullptr);
108 void addMessage(
const QString &text,
bool isUser);
124 std::unordered_set<std::string> &first_set,
126 std::unordered_set<std::string> &processing,
127 QTreeWidgetItem *parent);
130 const std::vector<std::string> &symbols,
131 std::unordered_set<std::string> &first_set,
133 std::vector<std::pair<std::string, std::vector<std::string>>> &active_derivations);
136 void drawTree(
const std::unique_ptr<TreeNode> &root,
137 QGraphicsScene *scene,
183 void on_confirmButton_clicked();
184 void on_userResponse_textChanged();
193 QWidget::closeEvent(event);
196 bool eventFilter(QObject *obj, QEvent *event)
override;
200 Ui::LLTutorWindow *ui;
206 size_t currentRule = 0;
207 const unsigned kMaxHighlightTries = 3;
208 const unsigned kMaxTotalTries = 5;
209 unsigned lltries = 0;
210 unsigned cntRightAnswers = 0, cntWrongAnswers = 0;
212 using Cell = std::pair<QString, QString>;
213 std::vector<Cell> lastWrongCells;
216 QVector<QString> sortedNonTerminals;
217 QVector<QPair<QString, QVector<QString>>> sortedGrammar;
218 QString formattedGrammar;
220 QMap<QString, QMap<QString, QVector<QString>>> lltable;
221 QVector<QVector<QString>> rawTable;
222 QSet<QString> solutionSet;
229 bool isCorrect =
true;
230 MessageLog(
const QString &message,
bool isUser)
234 void toggleIsCorrect() { isCorrect =
false; }
237 QVector<MessageLog> conversationLog;
238 QWidget *lastUserMessage =
nullptr;
239 qsizetype lastUserMessageLogIdx = -1;
241 QMap<QString, QString> userCAB;
242 QMap<QString, QString> userSIG;
243 QMap<QString, QString> userSD;
246 std::vector<std::string> qvectorToStdVector(
const QVector<QString> &qvec);
247 QVector<QString> stdVectorToQVector(
const std::vector<std::string> &vec);
248 QSet<QString> stdUnorderedSetToQSet(
const std::unordered_set<std::string> &uset);
249 std::unordered_set<std::string> qsetToStdUnorderedSet(
const QSet<QString> &qset);
251 void setupTutorial();
253 void fillSortedGrammar();
255 QPropertyAnimation *m_shakeAnimation
258 TutorialManager *tm =
nullptr;
260 QRegularExpression re{
"^\\s+|\\s+$"};
Definition ll1_parser.hpp:10
Dialog for filling and submitting an LL(1) parsing table.
Definition lltabledialog.h:23
void wrongAnimation()
Visual shake/flash for incorrect answer.
Definition lltutorwindow.cpp:791
QString feedbackForCPrime()
Definition lltutorwindow.cpp:1722
void showTableForCPrime()
Display the full LL(1) table in C' ex.
Definition lltutorwindow.cpp:437
void wrongUserResponseAnimation()
Animation specific to user chat input.
Definition lltutorwindow.cpp:823
void sessionFinished(int cntRight, int cntWrong)
QString TeachLL1Table()
Definition lltutorwindow.cpp:2408
~LLTutorWindow()
Definition lltutorwindow.cpp:81
void showTreeGraphics(std::unique_ptr< TreeNode > root)
Definition lltutorwindow.cpp:2178
void markLastUserIncorrect()
Marks last message as incorrect.
Definition lltutorwindow.cpp:918
void animateLabelColor(QLabel *label, const QColor &flashColor)
Definition lltutorwindow.cpp:888
void drawTree(const std::unique_ptr< TreeNode > &root, QGraphicsScene *scene, QPointF pos, int hSpacing, int vSpacing)
Definition lltutorwindow.cpp:2093
bool verifyResponseForB(const QString &userResponse)
Definition lltutorwindow.cpp:1277
QString feedbackForA2()
Definition lltutorwindow.cpp:1510
LLTutorWindow(const Grammar &grammar, TutorialManager *tm=nullptr, QWidget *parent=nullptr)
Constructs the LL(1) tutor window with a given grammar.
Definition lltutorwindow.cpp:9
void showTable()
< Export chat to PDF
Definition lltutorwindow.cpp:599
void feedbackForB1TreeGraphics()
Definition lltutorwindow.cpp:1587
QString solutionForA1()
Definition lltutorwindow.cpp:1362
bool verifyResponseForA1(const QString &userResponse)
Definition lltutorwindow.cpp:1269
QString feedbackForB2()
Definition lltutorwindow.cpp:1634
QString feedbackForB1()
Definition lltutorwindow.cpp:1599
bool verifyResponseForC()
Definition lltutorwindow.cpp:1307
void closeEvent(QCloseEvent *event) override
Definition lltutorwindow.h:190
void addWidgetMessage(QWidget *widget)
< Add text message to chat
Definition lltutorwindow.cpp:1726
QString solution(const std::string &state)
QString feedbackForA1()
Definition lltutorwindow.cpp:1500
bool verifyResponseForB1(const QString &userResponse)
Definition lltutorwindow.cpp:1287
bool verifyResponse(const QString &userResponse)
Definition lltutorwindow.cpp:1231
QString TeachPredictionSymbols(const QString &ant, const production &conseq)
Definition lltutorwindow.cpp:2336
QString feedbackForAPrime()
Definition lltutorwindow.cpp:1536
void handleTableSubmission(const QVector< QVector< QString > > &raw, const QStringList &colHeaders)
Definition lltutorwindow.cpp:737
QString feedbackForA()
Definition lltutorwindow.cpp:1457
bool verifyResponseForA2(const QString &userResponse)
Definition lltutorwindow.cpp:1273
void updateState(bool isCorrect)
Updates the tutor state after verifying user response.
Definition lltutorwindow.cpp:1130
QString solutionForA2()
Definition lltutorwindow.cpp:1368
QSet< QString > solutionForB1()
Definition lltutorwindow.cpp:1385
QString feedback()
Definition lltutorwindow.cpp:1422
int computeSubtreeWidth(const std::unique_ptr< TreeNode > &node, int hSpacing)
Definition lltutorwindow.cpp:2081
QString TeachFollow(const QString &nt)
Definition lltutorwindow.cpp:2199
QStringList solutionForA()
Definition lltutorwindow.cpp:1354
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:1937
QString feedbackForC()
Definition lltutorwindow.cpp:1713
QSet< QString > solutionForB2()
Definition lltutorwindow.cpp:1408
QString FormatGrammar(const Grammar &grammar)
Formats a grammar for display in the chat interface.
Definition lltutorwindow.cpp:1786
void animateLabelPop(QLabel *label)
Definition lltutorwindow.cpp:853
bool verifyResponseForB2(const QString &userResponse)
Definition lltutorwindow.cpp:1297
QString feedbackForB()
Definition lltutorwindow.cpp:1546
bool verifyResponseForA(const QString &userResponse)
Definition lltutorwindow.cpp:1264
QString feedbackForBPrime()
Definition lltutorwindow.cpp:1674
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:2009
void exportConversationToPdf(const QString &filePath)
< Add widget (e.g., table, tree)
Definition lltutorwindow.cpp:85
void addMessage(const QString &text, bool isUser)
Definition lltutorwindow.cpp:311
void updateProgressPanel()
Definition lltutorwindow.cpp:270
QSet< QString > solutionForB()
Definition lltutorwindow.cpp:1377
bool eventFilter(QObject *obj, QEvent *event) override
Definition lltutorwindow.cpp:2139
void feedbackForB1TreeWidget()
Definition lltutorwindow.cpp:1733
QString generateQuestion()
Generates a question for the current state of the tutor.
Definition lltutorwindow.cpp:1050
Manages interactive tutorials by highlighting UI elements and guiding the user.
Definition tutorialmanager.h:35
std::vector< std::string > production
Represents the right-hand side of a grammar rule.
Definition grammar.hpp:17
State
Definition lltutorwindow.h:39
@ C
Definition lltutorwindow.h:39
@ A1
Definition lltutorwindow.h:39
@ A
Definition lltutorwindow.h:39
@ B
Definition lltutorwindow.h:39
@ C_prime
Definition lltutorwindow.h:39
@ B2
Definition lltutorwindow.h:39
@ B_prime
Definition lltutorwindow.h:39
@ A2
Definition lltutorwindow.h:39
@ B1
Definition lltutorwindow.h:39
@ fin
Definition lltutorwindow.h:39
@ A_prime
Definition lltutorwindow.h:39
Represents a context-free grammar, including its rules, symbol table, and starting symbol.
Definition grammar.hpp:27
TreeNode structure used to build derivation trees.
Definition lltutorwindow.h:70
std::vector< std::unique_ptr< TreeNode > > children
Definition lltutorwindow.h:72
QString label
Definition lltutorwindow.h:71
Represents a state in the LR(0) automaton.
Definition state.hpp:16