diff --git a/alib2algo/src/regexp/convert/ToAutomaton.cpp b/alib2algo/src/regexp/convert/ToAutomaton.cpp index 3ae1558fe05d64ec6feac1f72576432cd7e28a3c..e943f5b29887262092481a3cb1b5ca9e3716962b 100644 --- a/alib2algo/src/regexp/convert/ToAutomaton.cpp +++ b/alib2algo/src/regexp/convert/ToAutomaton.cpp @@ -6,7 +6,6 @@ */ #include "ToAutomaton.h" -#include "ToAutomatonGlushkov.h" namespace regexp { @@ -16,16 +15,7 @@ automaton::Automaton ToAutomaton::convert(const regexp::RegExp& regexp) { return dispatch(regexp.getData()); } -automaton::Automaton ToAutomaton::convert(const regexp::FormalRegExp < > & regexp) { - return automaton::Automaton(ToAutomatonGlushkov::convert(regexp)); -} - auto ToAutomatonFormalRegExp = ToAutomaton::RegistratorWrapper<automaton::Automaton, regexp::FormalRegExp < > >(ToAutomaton::convert); - -automaton::Automaton ToAutomaton::convert(const regexp::UnboundedRegExp < > & regexp) { - return automaton::Automaton(ToAutomatonGlushkov::convert(regexp)); -} - auto ToAutomatonUnboundedRegExp = ToAutomaton::RegistratorWrapper<automaton::Automaton, regexp::UnboundedRegExp < > >( ToAutomaton::convert); } /* namespace convert */ diff --git a/alib2algo/src/regexp/convert/ToAutomaton.h b/alib2algo/src/regexp/convert/ToAutomaton.h index bcbb8b9e9fbab7b0fdcc096ce972e1eabe6ec078..389da3e8fd99674c7a837daf7184cbcdd39132c7 100644 --- a/alib2algo/src/regexp/convert/ToAutomaton.h +++ b/alib2algo/src/regexp/convert/ToAutomaton.h @@ -16,6 +16,8 @@ #include <automaton/Automaton.h> +#include "ToAutomatonGlushkov.h" + namespace regexp { namespace convert { @@ -28,11 +30,23 @@ public: */ static automaton::Automaton convert(const regexp::RegExp& regexp); - static automaton::Automaton convert(const regexp::FormalRegExp < > & regexp); - static automaton::Automaton convert(const regexp::UnboundedRegExp < > & regexp); + template < class SymbolType > + static automaton::Automaton convert(const regexp::FormalRegExp < SymbolType > & regexp); + template < class SymbolType > + static automaton::Automaton convert(const regexp::UnboundedRegExp < SymbolType > & regexp); }; +template < class SymbolType > +automaton::Automaton ToAutomaton::convert(const regexp::FormalRegExp < SymbolType > & regexp) { + return automaton::Automaton(ToAutomatonGlushkov::convert(regexp)); +} + +template < class SymbolType > +automaton::Automaton ToAutomaton::convert(const regexp::UnboundedRegExp < SymbolType > & regexp) { + return automaton::Automaton(ToAutomatonGlushkov::convert(regexp)); +} + } /* namespace convert */ } /* namespace regexp */ diff --git a/alib2algo/src/regexp/convert/ToGrammar.cpp b/alib2algo/src/regexp/convert/ToGrammar.cpp index d02b338ab0703d891e993e7d509313c4624a6842..0b51d8f6ebc172759077921d63e83cf576ab34f2 100644 --- a/alib2algo/src/regexp/convert/ToGrammar.cpp +++ b/alib2algo/src/regexp/convert/ToGrammar.cpp @@ -6,7 +6,6 @@ */ #include "ToGrammar.h" -#include "ToGrammarRightRGGlushkov.h" namespace regexp { @@ -16,16 +15,7 @@ grammar::Grammar ToGrammar::convert(const regexp::RegExp& regexp) { return dispatch(regexp.getData()); } -grammar::Grammar ToGrammar::convert(const regexp::FormalRegExp < > & regexp) { - return grammar::Grammar(ToGrammarRightRGGlushkov::convert(regexp)); -} - auto ToGrammarFormalRegExp = ToGrammar::RegistratorWrapper<grammar::Grammar, regexp::FormalRegExp < > >(ToGrammar::convert); - -grammar::Grammar ToGrammar::convert(const regexp::UnboundedRegExp < > & regexp) { - return grammar::Grammar(ToGrammarRightRGGlushkov::convert(regexp)); -} - auto ToGrammarUnboundedRegExp = ToGrammar::RegistratorWrapper<grammar::Grammar, regexp::UnboundedRegExp < > >(ToGrammar::convert); } /* namespace convert */ diff --git a/alib2algo/src/regexp/convert/ToGrammar.h b/alib2algo/src/regexp/convert/ToGrammar.h index f302528b674350b0d082ff5f9d5a8c826cabcf25..4af1274e848cc20415023b5b83a092751ff023ad 100644 --- a/alib2algo/src/regexp/convert/ToGrammar.h +++ b/alib2algo/src/regexp/convert/ToGrammar.h @@ -14,6 +14,8 @@ #include <regexp/RegExp.h> #include <regexp/RegExpFeatures.h> +#include "ToGrammarRightRGGlushkov.h" + namespace regexp { namespace convert { @@ -26,11 +28,23 @@ public: */ static grammar::Grammar convert(const regexp::RegExp& regexp); - static grammar::Grammar convert(const regexp::FormalRegExp < > & regexp); - static grammar::Grammar convert(const regexp::UnboundedRegExp < > & regexp); + template < class SymbolType > + static grammar::Grammar convert(const regexp::FormalRegExp < SymbolType > & regexp); + template < class SymbolType > + static grammar::Grammar convert(const regexp::UnboundedRegExp < SymbolType > & regexp); }; +template < class SymbolType > +grammar::Grammar ToGrammar::convert(const regexp::FormalRegExp < SymbolType > & regexp) { + return grammar::Grammar(ToGrammarRightRGGlushkov::convert(regexp)); +} + +template < class SymbolType > +grammar::Grammar ToGrammar::convert(const regexp::UnboundedRegExp < SymbolType > & regexp) { + return grammar::Grammar(ToGrammarRightRGGlushkov::convert(regexp)); +} + } /* namespace convert */ } /* namespace regexp */