void FaToDFA::setFA(FiniteAutomata *_FA) { this->FA = *_FA; if(this->FA.hasEpsilon()) emit sendStatusBarMessage(tr("WARNING: Input finite automata has epsilon rules.")); not_dfa_widget->clearStatus(); setMode(mode); }
StateNode::StateNode(DiagramScene *scene, FiniteAutomata *_FA, QString uniqueName) { FA = _FA; myscene = scene; node_name = uniqueName; firstInit(); connect(this,SIGNAL(sendStatusBarMessage(QString)),scene,SIGNAL(sendStatusBarMessage(QString))); connect(this,SIGNAL(FA_changed(FiniteAutomata*)),scene,SIGNAL(FA_changed(FiniteAutomata*))); connect(this,SIGNAL(xChanged()),this,SLOT(positionChanged())); connect(this,SIGNAL(yChanged()),this,SLOT(positionChanged())); FA->addState(node_name); emit FA_changed(FA); }
void FaToDFA::nextStep() { if(FA.startState == "") { emit sendStatusBarMessage("WARNING: Input FA has not start state."); return; } if(FA.hasEpsilon()) { emit sendStatusBarMessage("ERROR: Input FA has epsilon rules."); return; } algorithm_widget->enablePrev(); switch(prewInstruction) { case HEADER: actInstruction = VAR_INIT; break; case VAR_INIT: actInstruction = DO; break; case DO: actInstruction = DO_INIT; break; case DO_INIT: alphabet = FA.alphabet.toList(); alphabet.sort(); if( ! alphabet.empty()) actInstruction = FOREACH_A; else actInstruction = IF_FINAL; break; case FOREACH_A: actInstruction = INIT_DOUBLE_PRIME_Q; break; case INIT_DOUBLE_PRIME_Q: rules = QSet<ComputationalRules>(); foreach(QString from,act_state) { rules += FA.findRule_FromSymbol(from,a).toSet(); } if( ! rules.empty()) actInstruction = FOREACH_RULE_IN_Q; else actInstruction = IF_Q_NEW; break; case FOREACH_RULE_IN_Q: actInstruction = DOUBLE_PRIME_Q; break; case DOUBLE_PRIME_Q: if( ! rules.empty()) actInstruction = FOREACH_RULE_IN_Q; else actInstruction = IF_Q_NEW; break; case IF_Q_NEW: actInstruction = IF_DOUBLE_PRIME_Q; break; case IF_DOUBLE_PRIME_Q: if ( ! alphabet.empty()) actInstruction = FOREACH_A; else actInstruction = IF_FINAL; break; case IF_FINAL: actInstruction = WHILE_NEW; break; case WHILE_NEW: if ( ! Q_new.empty()) actInstruction = DO; else actInstruction = last_instruction; break; }