From 1e694b088d2fab425a20b6798cd9a252e51aa32f Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Mon, 4 Feb 2019 13:03:29 +0100 Subject: [PATCH] add user documentation to grammar convert --- alib2algo/src/grammar/convert/ToAutomaton.cpp | 27 ++++++++++++-- alib2algo/src/grammar/convert/ToAutomaton.h | 37 ++++++++++++++++--- .../grammar/convert/ToAutomatonBottomUp.cpp | 13 ++++++- .../src/grammar/convert/ToAutomatonBottomUp.h | 10 ++++- .../src/grammar/convert/ToGrammarLeftRG.cpp | 6 ++- .../src/grammar/convert/ToGrammarLeftRG.h | 4 +- .../src/grammar/convert/ToGrammarRightRG.cpp | 6 ++- .../src/grammar/convert/ToGrammarRightRG.h | 4 +- alib2algo/src/grammar/convert/ToRegExp.cpp | 13 ++++++- alib2algo/src/grammar/convert/ToRegExp.h | 7 +++- .../src/grammar/convert/ToRegExpAlgebraic.cpp | 13 ++++++- .../src/grammar/convert/ToRegExpAlgebraic.h | 4 +- 12 files changed, 119 insertions(+), 25 deletions(-) diff --git a/alib2algo/src/grammar/convert/ToAutomaton.cpp b/alib2algo/src/grammar/convert/ToAutomaton.cpp index 80de0d939f..03d43851d5 100644 --- a/alib2algo/src/grammar/convert/ToAutomaton.cpp +++ b/alib2algo/src/grammar/convert/ToAutomaton.cpp @@ -11,10 +11,29 @@ namespace grammar { namespace convert { -auto ToAutomatonLeftRG = registration::AbstractRegister < ToAutomaton, automaton::NFA < >, const grammar::LeftRG < > & > ( ToAutomaton::convert ); -auto ToAutomatonRightRG = registration::AbstractRegister < ToAutomaton, automaton::NFA < >, const grammar::RightRG < > & > ( ToAutomaton::convert ); -auto ToAutomatonCFG = registration::AbstractRegister < ToAutomaton, automaton::NPDA < DefaultSymbolType, DefaultEpsilonType, ext::variant < DefaultSymbolType, DefaultSymbolType >, unsigned >, const grammar::CFG < > & > ( ToAutomaton::convert ); -auto ToAutomatonEpsilonFreeCFG = registration::AbstractRegister < ToAutomaton, automaton::NPDA < DefaultSymbolType, DefaultEpsilonType, ext::variant < DefaultSymbolType, DefaultSymbolType >, unsigned >, const grammar::EpsilonFreeCFG < > & > ( ToAutomaton::convert ); +auto ToAutomatonLeftRG = registration::AbstractRegister < ToAutomaton, automaton::NFA < >, const grammar::LeftRG < > & > ( ToAutomaton::convert, "grammar" ).setDocumentation ( +"Performs the conversion.\n\ +\n\ +@param grammar the left regular grammar to convert\n\ +@return finite automaton accepting the language generated by @p grammar" ); + +auto ToAutomatonRightRG = registration::AbstractRegister < ToAutomaton, automaton::NFA < >, const grammar::RightRG < > & > ( ToAutomaton::convert, "grammar" ).setDocumentation ( +"Performs the conversion.\n\ +\n\ +@param grammar the left regular grammar to convert\n\ +@return finite automaton accepting the language generated by @p grammar" ); + +auto ToAutomatonCFG = registration::AbstractRegister < ToAutomaton, automaton::NPDA < DefaultSymbolType, DefaultEpsilonType, ext::variant < DefaultSymbolType, DefaultSymbolType >, unsigned >, const grammar::CFG < > & > ( ToAutomaton::convert, "grammar" ).setDocumentation ( +"Performs the conversion.\n\ +\n\ +@param grammar some context free grammar\n\ +@return pushdown automaton accepting the language generated by @p grammar" ); + +auto ToAutomatonEpsilonFreeCFG = registration::AbstractRegister < ToAutomaton, automaton::NPDA < DefaultSymbolType, DefaultEpsilonType, ext::variant < DefaultSymbolType, DefaultSymbolType >, unsigned >, const grammar::EpsilonFreeCFG < > & > ( ToAutomaton::convert, "grammar" ).setDocumentation ( +"Performs the conversion.\n\ +\n\ +@param grammar some context free grammar\n\ +@return pushdown automaton accepting the language generated by @p grammar" ); } /* namespace convert */ diff --git a/alib2algo/src/grammar/convert/ToAutomaton.h b/alib2algo/src/grammar/convert/ToAutomaton.h index ee9c818337..c61e9f50a2 100644 --- a/alib2algo/src/grammar/convert/ToAutomaton.h +++ b/alib2algo/src/grammar/convert/ToAutomaton.h @@ -33,15 +33,42 @@ namespace convert { class ToAutomaton { public: /** - * Performs conversion. - * @param grammar Regular grammar to convert. - * @return FSM equivalent to source grammar. + * Performs the conversion. + * + * \tparam TerminalSymbolType the type of terminal symbol of the grammar + * \tparam NonterminalSymbolType the type of nonterminal symbol of the grammar + * + * \param grammar the left regular grammar to convert. + * + * \return finite automaton accepting the language generated by @p grammar. */ template < class TerminalSymbolType, class NonterminalSymbolType > - static automaton::NFA < TerminalSymbolType, NonterminalSymbolType > convert(const grammar::LeftRG < TerminalSymbolType, NonterminalSymbolType > & grammar); + static automaton::NFA < TerminalSymbolType, NonterminalSymbolType > convert ( const grammar::LeftRG < TerminalSymbolType, NonterminalSymbolType > & grammar ); + + /** + * \overload + * + * \tparam TerminalSymbolType the type of terminal symbol of the grammar + * \tparam NonterminalSymbolType the type of nonterminal symbol of the grammar + * + * \param grammar the right regular grammar to convert. + * + * \return finite automaton accepting the language generated by @p grammar. + */ template < class TerminalSymbolType, class NonterminalSymbolType > - static automaton::NFA < TerminalSymbolType, NonterminalSymbolType > convert(const grammar::RightRG < TerminalSymbolType, NonterminalSymbolType > & grammar); + static automaton::NFA < TerminalSymbolType, NonterminalSymbolType > convert ( const grammar::RightRG < TerminalSymbolType, NonterminalSymbolType > & grammar ); + /** + * \overload + * + * \tparam T the type of converted grammar + * \tparam TerminalSymbolType the type of terminal symbol of the grammar + * \tparam NonterminalSymbolType the type of nonterminal symbol of the grammar + * + * \param grammar some context free grammar. + * + * \return pushdown automaton accepting the language generated by @p grammar. + */ template < class T, class TerminalSymbolType = typename grammar::TerminalSymbolTypeOfGrammar < T >, class NonterminalSymbolType = typename grammar::NonterminalSymbolTypeOfGrammar < T > > static automaton::NPDA < TerminalSymbolType, DefaultEpsilonType, ext::variant < TerminalSymbolType, NonterminalSymbolType >, unsigned > convert ( const T & grammar ); }; diff --git a/alib2algo/src/grammar/convert/ToAutomatonBottomUp.cpp b/alib2algo/src/grammar/convert/ToAutomatonBottomUp.cpp index a74aff1100..478383bdfa 100644 --- a/alib2algo/src/grammar/convert/ToAutomatonBottomUp.cpp +++ b/alib2algo/src/grammar/convert/ToAutomatonBottomUp.cpp @@ -11,8 +11,17 @@ namespace grammar { namespace convert { -auto ToAutomatonBottomUpCFG = registration::AbstractRegister < ToAutomatonBottomUp, automaton::NPDA < DefaultSymbolType, DefaultEpsilonType, ext::variant < DefaultSymbolType, DefaultSymbolType >, unsigned >, const grammar::CFG < > & > ( ToAutomatonBottomUp::convert ); -auto ToAutomatonBottomUpEpsilonFreeCFG = registration::AbstractRegister < ToAutomatonBottomUp, automaton::NPDA < DefaultSymbolType, DefaultEpsilonType, ext::variant < DefaultSymbolType, DefaultSymbolType >, unsigned >, const grammar::EpsilonFreeCFG < > & > ( ToAutomatonBottomUp::convert ); +auto ToAutomatonBottomUpCFG = registration::AbstractRegister < ToAutomatonBottomUp, automaton::NPDA < DefaultSymbolType, DefaultEpsilonType, ext::variant < DefaultSymbolType, DefaultSymbolType >, unsigned >, const grammar::CFG < > & > ( ToAutomatonBottomUp::convert, "grammar" ).setDocumentation ( +"Converts a context free grammar to a pushdown automaton by method of bottom up analysis.\n\ +\n\ +@param grammar the converted context free grammar\n\ +@return pushdown automaton accepting the language generated by @p grammar"); + +auto ToAutomatonBottomUpEpsilonFreeCFG = registration::AbstractRegister < ToAutomatonBottomUp, automaton::NPDA < DefaultSymbolType, DefaultEpsilonType, ext::variant < DefaultSymbolType, DefaultSymbolType >, unsigned >, const grammar::EpsilonFreeCFG < > & > ( ToAutomatonBottomUp::convert, "grammar" ).setDocumentation ( +"Converts a context free grammar to a pushdown automaton by method of bottom up analysis.\n\ +\n\ +@param grammar the converted context free grammar\n\ +@return pushdown automaton accepting the language generated by @p grammar"); } /* namespace convert */ diff --git a/alib2algo/src/grammar/convert/ToAutomatonBottomUp.h b/alib2algo/src/grammar/convert/ToAutomatonBottomUp.h index c82649bdbf..473bfb606a 100644 --- a/alib2algo/src/grammar/convert/ToAutomatonBottomUp.h +++ b/alib2algo/src/grammar/convert/ToAutomatonBottomUp.h @@ -28,7 +28,15 @@ namespace convert { class ToAutomatonBottomUp { public: /** - * Performs conversion. + * Converts a context free grammar to a pushdown automaton by method of bottom up analysis. + * + * \tparam T the type of converted grammar + * \tparam TerminalSymbolType the type of terminals in the converted grammar + * \tparam NonterminalSymbolType the type of nonterminals in the converted grammar + * + * \param grammar the converted context free grammar + * + * \return pushdown automaton accepting the language generated by @p grammar */ template < class T, class TerminalSymbolType = typename grammar::TerminalSymbolTypeOfGrammar < T >, class NonterminalSymbolType = typename grammar::NonterminalSymbolTypeOfGrammar < T > > static automaton::NPDA < TerminalSymbolType, DefaultEpsilonType, ext::variant < TerminalSymbolType, NonterminalSymbolType >, unsigned > convert(const T& grammar); diff --git a/alib2algo/src/grammar/convert/ToGrammarLeftRG.cpp b/alib2algo/src/grammar/convert/ToGrammarLeftRG.cpp index f91cb42a56..1028f62ba6 100644 --- a/alib2algo/src/grammar/convert/ToGrammarLeftRG.cpp +++ b/alib2algo/src/grammar/convert/ToGrammarLeftRG.cpp @@ -12,7 +12,11 @@ namespace grammar { namespace convert { -auto ToGrammarLeftRGRightRG = registration::AbstractRegister < ToGrammarLeftRG, grammar::LeftRG < >, const grammar::RightRG < > & > ( ToGrammarLeftRG::convert ); +auto ToGrammarLeftRGRightRG = registration::AbstractRegister < ToGrammarLeftRG, grammar::LeftRG < >, const grammar::RightRG < > & > ( ToGrammarLeftRG::convert, "grammar" ).setDocumentation ( +"Transforms a right regular grammar to left regular grammar.\n\ +\n\ +@param grammar the right regular grammar to convert\n\ +@return left regular grammar which is equivalent to source right regular grammar." ); } /* namespace convert */ diff --git a/alib2algo/src/grammar/convert/ToGrammarLeftRG.h b/alib2algo/src/grammar/convert/ToGrammarLeftRG.h index 8fe5e86b7a..190e758413 100644 --- a/alib2algo/src/grammar/convert/ToGrammarLeftRG.h +++ b/alib2algo/src/grammar/convert/ToGrammarLeftRG.h @@ -23,12 +23,12 @@ namespace convert { class ToGrammarLeftRG { public: /** - * Performs conversion. + * Transforms a right regular grammar to left regular grammar. * * \tparam TerminalSymbolType used for the terminal alphabet of the grammar. * \tparam NonterminalSymbolType used for the nonterminal alphabet, and the initial symbol of the grammar. * - * \param grammar Right regular grammar to convert + * \param grammar the right regular grammar to convert * * \return left regular grammar which is equivalent to source right regular grammar. */ diff --git a/alib2algo/src/grammar/convert/ToGrammarRightRG.cpp b/alib2algo/src/grammar/convert/ToGrammarRightRG.cpp index a906b00f7a..cab9d33e21 100644 --- a/alib2algo/src/grammar/convert/ToGrammarRightRG.cpp +++ b/alib2algo/src/grammar/convert/ToGrammarRightRG.cpp @@ -12,7 +12,11 @@ namespace grammar { namespace convert { -auto ToGrammarRightRGLeftRG = registration::AbstractRegister < ToGrammarRightRG, grammar::RightRG < >, const grammar::LeftRG < > & > ( ToGrammarRightRG::convert ); +auto ToGrammarRightRGLeftRG = registration::AbstractRegister < ToGrammarRightRG, grammar::RightRG < >, const grammar::LeftRG < > & > ( ToGrammarRightRG::convert, "grammar" ).setDocumentation ( +"Transforms a left regular grammar to right regular grammar.\n\ +\n\ +@param grammar the left regular grammar to convert\n\ +@return right regular grammar which is equivalent to source left regular grammar." ); } /* namespace convert */ diff --git a/alib2algo/src/grammar/convert/ToGrammarRightRG.h b/alib2algo/src/grammar/convert/ToGrammarRightRG.h index b22ba5bece..144f139304 100644 --- a/alib2algo/src/grammar/convert/ToGrammarRightRG.h +++ b/alib2algo/src/grammar/convert/ToGrammarRightRG.h @@ -23,12 +23,12 @@ namespace convert { class ToGrammarRightRG { public: /** - * Performs conversion. + * Transforms a left regular grammar to right regular grammar. * * \tparam TerminalSymbolType used for the terminal alphabet of the grammar. * \tparam NonterminalSymbolType used for the nonterminal alphabet, and the initial symbol of the grammar. * - * \param grammar Left regular grammar to convert + * \param grammar left regular grammar to convert * * \return right regular grammar which is equivalent to source left regular grammar. */ diff --git a/alib2algo/src/grammar/convert/ToRegExp.cpp b/alib2algo/src/grammar/convert/ToRegExp.cpp index f78e6bc305..2d678b1dfe 100644 --- a/alib2algo/src/grammar/convert/ToRegExp.cpp +++ b/alib2algo/src/grammar/convert/ToRegExp.cpp @@ -12,8 +12,17 @@ namespace grammar { namespace convert { -auto ToRegExpRightRG = registration::AbstractRegister < ToRegExp, regexp::UnboundedRegExp < >, const grammar::RightRG < > & > ( ToRegExp::convert ); -auto ToRegExpLeftRG = registration::AbstractRegister < ToRegExp, regexp::UnboundedRegExp < >, const grammar::LeftRG < > & > ( ToRegExp::convert ); +auto ToRegExpRightRG = registration::AbstractRegister < ToRegExp, regexp::UnboundedRegExp < >, const grammar::RightRG < > & > ( ToRegExp::convert, "grammar" ).setDocumentation ( +"Converts a regular grammar to regular expression.\n\ +\n\ +@param grammar the regular grammar to convert\n\ +@return regexp describing language generated by @p grammar." ); + +auto ToRegExpLeftRG = registration::AbstractRegister < ToRegExp, regexp::UnboundedRegExp < >, const grammar::LeftRG < > & > ( ToRegExp::convert, "grammar" ).setDocumentation ( +"Converts a regular grammar to regular expression.\n\ +\n\ +@param grammar the regular grammar to convert\n\ +@return regexp describing language generated by @p grammar." ); } /* namespace convert */ diff --git a/alib2algo/src/grammar/convert/ToRegExp.h b/alib2algo/src/grammar/convert/ToRegExp.h index c3069c533e..b70678eb1e 100644 --- a/alib2algo/src/grammar/convert/ToRegExp.h +++ b/alib2algo/src/grammar/convert/ToRegExp.h @@ -20,8 +20,11 @@ namespace convert { class ToRegExp { public: /** - * \param grammar Grammar to convert - * \return regexp equivalent to source right regular grammar. + * Converts a regular grammar to regular expression. + * + * \param grammar the regular grammar to convert + * + * \return regexp describing language generated by @p grammar. */ template < class TerminalSymbolType, class NonterminalSymbolType > static regexp::UnboundedRegExp < TerminalSymbolType > convert ( const grammar::RightRG < TerminalSymbolType, NonterminalSymbolType > & grammar ); diff --git a/alib2algo/src/grammar/convert/ToRegExpAlgebraic.cpp b/alib2algo/src/grammar/convert/ToRegExpAlgebraic.cpp index 1aa50c530d..3c431de767 100644 --- a/alib2algo/src/grammar/convert/ToRegExpAlgebraic.cpp +++ b/alib2algo/src/grammar/convert/ToRegExpAlgebraic.cpp @@ -12,8 +12,17 @@ namespace grammar { namespace convert { -auto ToRegExpAlgebraicLeftRG = registration::AbstractRegister < ToRegExpAlgebraic, regexp::UnboundedRegExp < >, const grammar::LeftRG < > & > ( ToRegExpAlgebraic::convert ); -auto ToRegExpAlgebraicRightRG = registration::AbstractRegister < ToRegExpAlgebraic, regexp::UnboundedRegExp < >, const grammar::RightRG < > & > ( ToRegExpAlgebraic::convert ); +auto ToRegExpAlgebraicLeftRG = registration::AbstractRegister < ToRegExpAlgebraic, regexp::UnboundedRegExp < >, const grammar::LeftRG < > & > ( ToRegExpAlgebraic::convert, "grammar" ).setDocumentation ( +"Converts a regular grammar to regular expression using regular equations.\n\ +\n\ +@param grammar Grammar to convert\n\ +@return regexp describing language generated by the @p grammar" ); + +auto ToRegExpAlgebraicRightRG = registration::AbstractRegister < ToRegExpAlgebraic, regexp::UnboundedRegExp < >, const grammar::RightRG < > & > ( ToRegExpAlgebraic::convert, "grammar" ).setDocumentation ( +"Converts a regular grammar to regular expression using regular equations.\n\ +\n\ +@param grammar Grammar to convert\n\ +@return regexp describing language generated by the @p grammar" ); } /* namespace convert */ diff --git a/alib2algo/src/grammar/convert/ToRegExpAlgebraic.h b/alib2algo/src/grammar/convert/ToRegExpAlgebraic.h index 6bfdf0943c..418d48e422 100644 --- a/alib2algo/src/grammar/convert/ToRegExpAlgebraic.h +++ b/alib2algo/src/grammar/convert/ToRegExpAlgebraic.h @@ -24,8 +24,10 @@ namespace convert { class ToRegExpAlgebraic { public: /** - * @return regexp equivalent to source right regular grammar. + * Converts a regular grammar to regular expression using regular equations. + * * @param grammar Grammar to convert + * @return regexp describing language generated by the @p grammar */ template < class TerminalSymbolType, class NonterminalSymbolType > static regexp::UnboundedRegExp < TerminalSymbolType > convert ( const grammar::RightRG < TerminalSymbolType, NonterminalSymbolType > & grammar); -- GitLab