Skip to content
Snippets Groups Projects
Determinize.h 2.54 KiB
Newer Older
  • Learn to ignore specific revisions
  • Jan Trávníček's avatar
    Jan Trávníček committed
    /*
     * NFADeterminizer.h
     *
     *  Created on: 16. 1. 2014
     *	  Author: Jan Vesely
     */
    
    
    #ifndef DETERMINIZE_H_
    #define DETERMINIZE_H_
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    
    #include <set>
    
    
    #include <automaton/common/State.h>
    #include <automaton/Automaton.h>
    #include <automaton/FSM/DFA.h>
    
    #include <automaton/PDA/DPDA.h>
    #include <automaton/PDA/VisiblyPushdownDPDA.h>
    #include <automaton/PDA/RealTimeHeightDeterministicDPDA.h>
    
    
    #include <exception/AlibException.h>
    
    namespace automaton {
    
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    namespace determinize {
    
    /**
     * Class for running determinization algorithm on fsm.
     */
    
    class Determinize : public automaton::VisitableAutomatonBase::const_visitor_type {
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    private:
    
    	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::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;
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    	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;
    
    
    	static const Determinize DETERMINIZE;
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    public:
    
    	/**
    	 * @param nfsm nondeterministic final-state machine given for determinization
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    	 * 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::DPDA determinize(const automaton::InputDrivenNPDA& nfa);
    	static automaton::RealTimeHeightDeterministicDPDA determinize(const automaton::RealTimeHeightDeterministicNPDA& nondeterministic);
    
    Jan Trávníček's avatar
    Jan Trávníček committed
    };
    
    } /* namespace determinize */
    
    
    } /* namespace automaton */
    
    #endif /* DETERMINIZE_H_ */