Skip to content

Commit 4e309b1

Browse files
committed
Finished save and load conversion CFG to PDA and handle epsilon.
1 parent 05186f8 commit 4e309b1

File tree

3 files changed

+22
-37
lines changed

3 files changed

+22
-37
lines changed

src/CFG/contextfreegrammar.cpp

Lines changed: 8 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,12 @@ QString CCFGRule::ToString() const
129129
foreach(const CSymbol& symbol, m_rightString){
130130
switch (symbol.GetType()) {
131131
case CSymbol::TType::terminal:
132-
ruleString += QString(" \"%1\" ").arg(symbol.GetString());
132+
if (symbol.GetString() == EPSILON) {
133+
ruleString += QString(" %1 ").arg(symbol.GetString());
134+
}
135+
else {
136+
ruleString += QString(" \"%1\" ").arg(symbol.GetString());
137+
}
133138
break;
134139
case CSymbol::TType::nonTerminal:
135140
ruleString += QString(" <%1> ").arg(symbol.GetString());
@@ -205,26 +210,6 @@ QString CContextFreeGrammar::NonTerminalAlphabetToString() const
205210
return result.left(result.length() - 2);
206211
}
207212

208-
//QSet<CTerminal> CContextFreeGrammar::GetTerminalAlphabet()
209-
//{
210-
// QSet<QString> outSet;
211-
// foreach(CTerminal terminal, m_terminalsAlphabet)
212-
// {
213-
// outSet.insert(terminal.GetString());
214-
// }
215-
// return outSet;
216-
//}
217-
218-
//QSet<CNonTerminal> CContextFreeGrammar::GetNoonTerminalAlphabet()
219-
//{
220-
// QSet<QString> outSet;
221-
// foreach(CNonTerminal nonTerminal, m_nonterminalsAlphabet)
222-
// {
223-
// outSet.insert(nonTerminal.GetString());
224-
// }
225-
// return outSet;
226-
//}
227-
228213
QSet<QString> CContextFreeGrammar::GetBothTerminalAndNonterminalAlphabet()
229214
{
230215
QSet<QString> terninals = CTerminal::CTerminalQSetToQStringQSet(GetTerminalAlphabet());
@@ -385,7 +370,7 @@ QDataStream& CSymbol::WriteToQDataStream(QDataStream & out) const
385370
QDataStream& CSymbol::ReadFromQDataStream(QDataStream & in)
386371
{
387372
quint32 tmpType;
388-
in >> m_symbol >> tmpType;
373+
in >> tmpType >> m_symbol;
389374
m_type = (TType)tmpType;
390375
return in;
391376
}
@@ -400,7 +385,7 @@ QDataStream & operator<<(QDataStream & out, const CTerminal & s)
400385
return s.WriteToQDataStream(out);
401386
}
402387

403-
QDataStream & operator >> (QDataStream & in, CNonTerminal & s)
388+
QDataStream & operator>>(QDataStream & in, CNonTerminal & s)
404389
{
405390
return s.ReadFromQDataStream(in);
406391
}

src/CFG/contextfreegrammar.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class CSymbol
2424
operator QString() const { return m_symbol; }
2525
static QSet<QString> CSymbolQSetToQStringQSet(const QSet<CSymbol>& csymbolSet);
2626
bool operator==(const CSymbol& s) const {return this->m_symbol == s.m_symbol ;}
27-
CSymbol& operator=(CSymbol other) { this->m_symbol = other.m_symbol; return *this; }
27+
CSymbol& operator=(CSymbol other) { this->m_symbol = other.m_symbol; m_type = other.m_type; return *this; }
2828
bool IsEmpty() const {return m_symbol.isEmpty();}
2929
void Trim() {m_symbol = m_symbol.trimmed();}
3030
void Append(QChar charter) {m_symbol.append(charter);}

src/mainwindow.cpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -609,18 +609,6 @@ void MainWindow::CfgToPda_example(const CContextFreeGrammar& cfg, QString exampl
609609
PrepareConversionWidget(Conversions::CFG_TO_PDA);
610610
((CCfgToPdaWidget*)m_centralWidget)->SetCfg(cfg);
611611

612-
/* Abylity to set PDA to pda widget
613-
CPushDownAutomata pda;
614-
pda.SetStartState("s");
615-
pda.SetStates(QSet<QString>{"s","s1","s2","f1","f2"});
616-
pda.SetFinalStates(QSet<QString>{"f1","f2"});
617-
pda.SetAplhabet(QSet<QString>{"a","b","c"});
618-
pda.SetStackAlphabet(QSet<QString>{"D","E","F"});
619-
pda.AddPDARule("s","s","a","D",QVector<QString>{"E","F"});
620-
pda.AddPDARule("s","s1","b","E",QVector<QString>{"D","F"});
621-
pda.AddPDARule("s2","f1","c","F","D");
622-
((CCfgToPdaWidget*)m_centralWidget)->SetPda(pda);
623-
*/
624612
m_exampleName = example_name;
625613
mySetWindowTitle();
626614
}
@@ -773,7 +761,19 @@ void MainWindow::on_action_open_file_triggered()
773761
}
774762
}
775763
break;
776-
case none:
764+
case CFG_TO_PDA:
765+
{
766+
CContextFreeGrammar g;
767+
in >> g;
768+
CfgToPda_example(g);
769+
if (m_mode != AlgorithmModes::algorithmSteping) {
770+
CPushDownAutomata pda;
771+
in >> pda;
772+
((CCfgToPdaWidget*)m_centralWidget)->SetPda(pda);
773+
}
774+
}
775+
break;
776+
case none:
777777
showStatusMessage(tr("ERROR: Input file in wrong format!"));
778778
return;
779779
break;

0 commit comments

Comments
 (0)