Newer
Older
*
* Created on: 16. 1. 2014
* Author: Jan Vesely
*/
#ifndef DETERMINIZE_H_
#define DETERMINIZE_H_
#include <automaton/common/State.h>
#include <automaton/Automaton.h>
#include <automaton/FSM/DFA.h>
#include <automaton/PDA/InputDrivenDPDA.h>
#include <automaton/PDA/VisiblyPushdownDPDA.h>
#include <automaton/PDA/RealTimeHeightDeterministicDPDA.h>
#include <automaton/TA/DFTA.h>
#include <exception/AlibException.h>
namespace determinize {
/**
* Class for running determinization algorithm on fsm.
*/
class Determinize : public automaton::VisitableAutomatonBase::const_visitor_type {
void Visit(void*, const automaton::EpsilonNFA& automaton) const;
void Visit(void*, const automaton::MultiInitialStateNFA& automaton) const;
void Visit(void*, const automaton::NFA& automaton) const;
void Visit(void*, const automaton::DFA& automaton) const;
void Visit(void*, const automaton::ExtendedNFA& automaton) const;
void Visit(void*, const automaton::CompactNFA& automaton) const;
void Visit(void*, const automaton::DPDA& automaton) const;
void Visit(void*, const automaton::SinglePopDPDA& automaton) const;
void Visit(void*, const automaton::InputDrivenDPDA& automaton) const;
void Visit(void*, const automaton::InputDrivenNPDA& automaton) const;
void Visit(void*, const automaton::VisiblyPushdownDPDA& automaton) const;
void Visit(void*, const automaton::VisiblyPushdownNPDA& automaton) const;
void Visit(void*, const automaton::RealTimeHeightDeterministicDPDA& automaton) const;
void Visit(void*, const automaton::RealTimeHeightDeterministicNPDA& automaton) const;
void Visit(void*, const automaton::NPDA& automaton) const;
void Visit(void*, const automaton::SinglePopNPDA& automaton) const;
void Visit(void*, const automaton::OneTapeDTM& automaton) const;
void Visit(void*, const automaton::DFTA& automaton) const;
void Visit(void*, const automaton::NFTA& automaton) const;
public:
/**
* @param nfsm nondeterministic final-state machine given for determinization
* Runs determinization algorithm on nondeterministic fsm given in constructor.
*/
static automaton::Automaton determinize(const automaton::Automaton& nfa);
static automaton::DFA determinize(const automaton::NFA& nfa);
static automaton::DFA determinize(const automaton::MultiInitialStateNFA& nfa);
static automaton::VisiblyPushdownDPDA determinize(const automaton::VisiblyPushdownNPDA& nondeterministic);
static automaton::InputDrivenDPDA determinize(const automaton::InputDrivenNPDA& nfa);
static automaton::RealTimeHeightDeterministicDPDA determinize(const automaton::RealTimeHeightDeterministicNPDA& nondeterministic);
static automaton::DFTA determinize(const automaton::NFTA& nfta);
} /* namespace automaton */
#endif /* DETERMINIZE_H_ */