Skip to content

Commit 4b63cdc

Browse files
authored
Merge pull request #52 from jose-rZM/fix/missing-translations-and-typo
Fix/missing translations and typo
2 parents 65e2fe3 + 43acced commit 4b63cdc

File tree

9 files changed

+3629
-548
lines changed

9 files changed

+3629
-548
lines changed

CHANGELOG.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Changelog
2+
3+
All notable changes to this project will be documented in this file.
4+
5+
## [1.0.1] - 2025-06-17
6+
### Added
7+
- Added `Doxyfile` for automatic documentation generation with Doxygen.
8+
- Completed missing translations for multilingual support (English/Spanish).
9+
10+
### Fixed
11+
- Corrected a typo in the SLR(1) Quick Reference view.
12+
- EPSILON is no longer shown when exporting LL(1) parse tables to PDF.
13+
- Improved feedback message for the FA question in the SLR module.
14+
15+
### Quality
16+
- All changes successfully passed CI (GitHub Actions).
17+
- Test suite: 158 tests passed (100% success rate).
18+
- Maintained high test coverage across modules (most above 90%).
19+
20+
## [1.0.0] - 2025-06-15
21+
### Initial Release
22+
- First public version of SyntaxTutor.
23+
- Includes LL(1) and SLR(1) modules with guided exercises.
24+
- Features interactive tutoring, automatic grammar generation, feedback system, and performance tracking.

Doxyfile

Lines changed: 2972 additions & 0 deletions
Large diffs are not rendered by default.

lltutorwindow.cpp

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -237,12 +237,18 @@ void LLTutorWindow::exportConversationToPdf(const QString& filePath) {
237237
R"(<div class="container"><table border='1' cellspacing='0' cellpadding='5'>)";
238238
html += "<tr><th>" + tr("No terminal / Símbolo") + "</th>";
239239
for (const auto& s : ll1.gr_.st_.terminals_) {
240+
if (s == ll1.gr_.st_.EPSILON_) {
241+
continue;
242+
}
240243
html += "<th>" + QString::fromStdString(s) + "</th>";
241244
}
242245
html += "</tr>";
243246
for (const auto& nt : std::as_const(sortedNonTerminals)) {
244247
html += "<tr><td align='center'>" + nt + "</td>";
245248
for (const auto& s : ll1.gr_.st_.terminals_) {
249+
if (s == ll1.gr_.st_.EPSILON_) {
250+
continue;
251+
}
246252
html += "<td align='center'>";
247253
if (ll1.ll1_t_[nt.toStdString()].contains(s)) {
248254
html += stdVectorToQVector(ll1.ll1_t_[nt.toStdString()][s][0])
@@ -1154,13 +1160,17 @@ void LLTutorWindow::updateState(bool isCorrect) {
11541160
userSD[key] = solutionForB().values().join(", ");
11551161
userCAB[sortedGrammar.at(currentRule).second.join(' ')] =
11561162
solutionForB1().values().join(", ");
1157-
if (sortedGrammar.at(currentRule).first.toStdString() != ll1.gr_.axiom_) {
1158-
userSIG[sortedGrammar.at(currentRule).first] = solutionForB2().values().join(", ");
1163+
if (sortedGrammar.at(currentRule).first.toStdString() !=
1164+
ll1.gr_.axiom_) {
1165+
userSIG[sortedGrammar.at(currentRule).first] =
1166+
solutionForB2().values().join(", ");
11591167
}
11601168
updateProgressPanel();
11611169
currentRule++;
1162-
currentState = static_cast<qsizetype>(currentRule) >= sortedGrammar.size() ? State::C
1163-
: State::B;
1170+
currentState =
1171+
static_cast<qsizetype>(currentRule) >= sortedGrammar.size()
1172+
? State::C
1173+
: State::B;
11641174
} else {
11651175
currentState = State::B1;
11661176
}
@@ -2177,7 +2187,7 @@ bool LLTutorWindow::eventFilter(QObject* obj, QEvent* event) {
21772187
void LLTutorWindow::showTreeGraphics(
21782188
std::unique_ptr<LLTutorWindow::TreeNode> root) {
21792189
QDialog* dialog = new QDialog(this);
2180-
dialog->setWindowTitle("Árbol de derivación CABECERA");
2190+
dialog->setWindowTitle(tr("Árbol de derivación CABECERA"));
21812191

21822192
QGraphicsScene* scene = new QGraphicsScene(dialog);
21832193

mainwindow.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -464,7 +464,7 @@ void MainWindow::on_actionSobre_la_aplicaci_n_triggered() {
464464

465465
about.setTextFormat(Qt::RichText);
466466
about.setText(
467-
tr("<h2>SyntaxTutor</h2>") + tr("<p><b>Versión: 1.0</b> ") +
467+
tr("<h2>SyntaxTutor</h2>") + tr("<p><b>Versión: 1.0.1</b> ") +
468468
qApp->applicationVersion() + tr("</p>") +
469469
tr("<p>Trabajo Fin de Grado – Analizador sintáctico interactivo.</p>") +
470470
tr("<p><b>Autor:</b> José R.</p>") +
@@ -583,7 +583,7 @@ void MainWindow::on_actionReferencia_SLR_1_triggered() {
583583
<ul>
584584
<li>Si existe el ítem <code>A → α∙aβ</code> en I, entonces <code>Action[I,a] = s<sub>j</sub></code> (shift al estado j = Goto(I,a)).</li>
585585
<li>Si existe el ítem <code>A → α∙</code> en I, entonces <code>Action[I,a] = r<sub>k</sub></code> (reduce usando la producción k = A→α) <em>para todo</em> <code>a ∈ SIG(A)</code>.</li>
586-
<li><code>Action[I,$] = acc</code> si <code>S'S∙</code> está en I (aceptación).</li>
586+
<li><code>Action[I,$] = acc</code> si <code>S → A·$</code> está en I (aceptación).</li>
587587
</ul>
588588
</li>
589589
<li><b>Transiciones (Goto):</b>

slrtutorwindow.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2425,7 +2425,8 @@ QString SLRTutorWindow::feedbackForFA() {
24252425
QString txtBase = tr("En el estado I%1 se produce un conflicto LR(0). Un "
24262426
"ítem completo compite con otro "
24272427
"desplazable. Debes escribir los terminales en los "
2428-
"que la tabla aplicará REDUCE.\n")
2428+
"que la tabla aplicará REDUCE. Los puedes calcular "
2429+
"calculando SIG del antecedente.\n")
24292430
.arg(stId);
24302431

24312432
QStringList sol = solutionForFA().values();

translations/st_en.qm

209 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)