Vcsn  2.5.dev
Be Rational
vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator > Class Template Reference

Random expression generator. More...

#include <random-expression.hh>

Collaboration diagram for vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >:

Public Types

using expressionset_t = ExpressionSet
 
using expression_t = typename expressionset_t::value_t
 
using weight_t = typename expressionset_t::weight_t
 
using weightset_t = typename expressionset_t::weightset_t
 

Public Member Functions

 random_expression_impl (const expressionset_t &es, const std::string &param, RandomGenerator &gen)
 
std::ostream & print_random_expression (std::ostream &out, const format &fmt={}) const
 Print a random expression string (not parsed, so there might be some syntactic sugar such as <+). More...
 
std::string random_expression_string () const
 A random expression string (not parsed, so there might be some syntactic sugar such as <+). More...
 
expression_t random_expression () const
 A random expression (parsed, so there cannot be syntactic sugar such as <+). More...
 

Private Member Functions

void parse_param_ (const std::string &param)
 
std::string make_param_ (unsigned length) const
 A string that specifies the current parameters. More...
 
void print_weight_ (std::ostream &out, const format &fmt) const
 Print random weight. More...
 
void print_label_ (std::ostream &out, const format &fmt) const
 Print label. More...
 
void print_unary_exp_ (std::ostream &out, unsigned length, const std::string &op, const format &fmt) const
 Print expression with unary operator. More...
 
void print_binary_exp_ (std::ostream &out, unsigned length, const std::string &op, const format &fmt) const
 Print binary expression with binary operator. More...
 
template<typename ExpSet = expressionset_t>
auto print_tuple_exp_ (std::ostream &out, unsigned length, const std::string &op, const format &fmt) const -> std::enable_if_t< context_t_of< ExpSet >::is_lat, void >
 Print a tuple operator. More...
 
template<typename ExpSet = expressionset_t>
auto print_tuple_exp_ (std::ostream &out, unsigned length, const std::string &op, const format &fmt) const -> std::enable_if_t<!context_t_of< ExpSet >::is_lat, void >
 Print a tuple operator. More...
 
std::ostream & print_random_expression_ (std::ostream &out, unsigned length, const format &fmt) const
 

Private Attributes

expressionset_t es_
 
weightset_t ws_
 
unsigned length_
 
std::map< std::string, floatoperators_
 For each operator, its probability. More...
 
const std::unordered_map< std::string, int > arities_
 Number of arguments of each operator. More...
 
std::vector< floatproba_op_
 Vector of weights associated with the operators, i.e., the probabilities to pick each operator. More...
 
RandomGenerator & gen_
 Random generator. More...
 
std::string random_weight_params_
 Random weights generator parameters. More...
 
random_weight< weightset_t, RandomGenerator > random_weight_ {gen_, ws_}
 Random weights generator. More...
 
discrete_chooser< RandomGenerator > choose_ {gen_}
 Random selection in containers. More...
 

Detailed Description

template<typename ExpressionSet, typename RandomGenerator = std::default_random_engine>
class vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >

Random expression generator.

Template Parameters
ExpressionSetthe expression set type.
RandomGeneratorthe random number engine type.

Definition at line 31 of file random-expression.hh.

Member Typedef Documentation

◆ expression_t

template<typename ExpressionSet , typename RandomGenerator = std::default_random_engine>
using vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::expression_t = typename expressionset_t::value_t

Definition at line 35 of file random-expression.hh.

◆ expressionset_t

template<typename ExpressionSet , typename RandomGenerator = std::default_random_engine>
using vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::expressionset_t = ExpressionSet

Definition at line 34 of file random-expression.hh.

◆ weight_t

template<typename ExpressionSet , typename RandomGenerator = std::default_random_engine>
using vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::weight_t = typename expressionset_t::weight_t

Definition at line 36 of file random-expression.hh.

◆ weightset_t

template<typename ExpressionSet , typename RandomGenerator = std::default_random_engine>
using vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::weightset_t = typename expressionset_t::weightset_t

Definition at line 37 of file random-expression.hh.

Constructor & Destructor Documentation

◆ random_expression_impl()

template<typename ExpressionSet , typename RandomGenerator = std::default_random_engine>
vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::random_expression_impl ( const expressionset_t es,
const std::string &  param,
RandomGenerator &  gen 
)
inline

Definition at line 39 of file random-expression.hh.

References vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::gen_, and vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::parse_param_().

Here is the call graph for this function:

Member Function Documentation

◆ make_param_()

template<typename ExpressionSet , typename RandomGenerator = std::default_random_engine>
std::string vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::make_param_ ( unsigned  length) const
inlineprivate

A string that specifies the current parameters.

Definition at line 115 of file random-expression.hh.

References vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::operators_, vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::random_weight_params_, vcsn::res, and vcsn::rat::to_string().

Referenced by vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::print_tuple_exp_().

Here is the call graph for this function:

◆ parse_param_()

◆ print_binary_exp_()

template<typename ExpressionSet , typename RandomGenerator = std::default_random_engine>
void vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::print_binary_exp_ ( std::ostream &  out,
unsigned  length,
const std::string &  op,
const format fmt 
) const
inlineprivate

Print binary expression with binary operator.

It is composed of the left and right side, and the operator. The number of symbols is randomly distribued between both side.

Definition at line 174 of file random-expression.hh.

References vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::gen_, vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::print_label_(), and vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::print_random_expression_().

Referenced by vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::print_random_expression_().

Here is the call graph for this function:

◆ print_label_()

template<typename ExpressionSet , typename RandomGenerator = std::default_random_engine>
void vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::print_label_ ( std::ostream &  out,
const format fmt 
) const
inlineprivate

◆ print_random_expression()

template<typename ExpressionSet , typename RandomGenerator = std::default_random_engine>
std::ostream& vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::print_random_expression ( std::ostream &  out,
const format fmt = {} 
) const
inline

Print a random expression string (not parsed, so there might be some syntactic sugar such as <+).

Definition at line 50 of file random-expression.hh.

References vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::length_, and vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::print_random_expression_().

Referenced by vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::random_expression_string().

Here is the call graph for this function:

◆ print_random_expression_()

template<typename ExpressionSet , typename RandomGenerator = std::default_random_engine>
std::ostream& vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::print_random_expression_ ( std::ostream &  out,
unsigned  length,
const format fmt 
) const
inlineprivate

◆ print_tuple_exp_() [1/2]

template<typename ExpressionSet , typename RandomGenerator = std::default_random_engine>
template<typename ExpSet = expressionset_t>
auto vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::print_tuple_exp_ ( std::ostream &  out,
unsigned  length,
const std::string &  op,
const format fmt 
) const -> std::enable_if_t<context_t_of<ExpSet>::is_lat, void>
inlineprivate

Print a tuple operator.

GCC5 crashes on the equivalent code with static_if.

Definition at line 197 of file random-expression.hh.

References vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::es_, vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::make_param_(), and vcsn::random_expression_string().

Referenced by vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::print_random_expression_().

Here is the call graph for this function:

◆ print_tuple_exp_() [2/2]

template<typename ExpressionSet , typename RandomGenerator = std::default_random_engine>
template<typename ExpSet = expressionset_t>
auto vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::print_tuple_exp_ ( std::ostream &  out,
unsigned  length,
const std::string &  op,
const format fmt 
) const -> std::enable_if_t<!context_t_of<ExpSet>::is_lat, void>
inlineprivate

Print a tuple operator.

Definition at line 223 of file random-expression.hh.

References vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::es_.

◆ print_unary_exp_()

template<typename ExpressionSet , typename RandomGenerator = std::default_random_engine>
void vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::print_unary_exp_ ( std::ostream &  out,
unsigned  length,
const std::string &  op,
const format fmt 
) const
inlineprivate

Print expression with unary operator.

Definition at line 144 of file random-expression.hh.

References vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::print_random_expression_(), and vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::print_weight_().

Referenced by vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::print_random_expression_().

Here is the call graph for this function:

◆ print_weight_()

template<typename ExpressionSet , typename RandomGenerator = std::default_random_engine>
void vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::print_weight_ ( std::ostream &  out,
const format fmt 
) const
inlineprivate

Print random weight.

Definition at line 127 of file random-expression.hh.

References vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::es_, vcsn::format::for_weights(), vcsn::detail::out(), and vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::random_weight_.

Referenced by vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::print_unary_exp_().

Here is the call graph for this function:

◆ random_expression()

template<typename ExpressionSet , typename RandomGenerator = std::default_random_engine>
expression_t vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::random_expression ( ) const
inline

A random expression (parsed, so there cannot be syntactic sugar such as <+).

Definition at line 67 of file random-expression.hh.

References vcsn::conv(), vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::es_, and vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::random_expression_string().

Referenced by vcsn::dyn::random_expression().

Here is the call graph for this function:

◆ random_expression_string()

template<typename ExpressionSet , typename RandomGenerator = std::default_random_engine>
std::string vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::random_expression_string ( ) const
inline

A random expression string (not parsed, so there might be some syntactic sugar such as <+).

Definition at line 58 of file random-expression.hh.

References vcsn::detail::out(), and vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::print_random_expression().

Referenced by vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::random_expression().

Here is the call graph for this function:

Member Data Documentation

◆ arities_

template<typename ExpressionSet , typename RandomGenerator = std::default_random_engine>
const std::unordered_map<std::string, int> vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::arities_
private
Initial value:
{
{"\\e", 0},
{"\\z", 0},
{"!", 1},
{"{c}", 1},
{"*", 1},
{"{T}", 1},
{"w.", 1},
{".w", 1},
{"&", 2},
{"&:", 2},
{":", 2},
{".", 2},
{"<+", 2},
{"%", 2},
{"+", 2},
{"{/}", 2},
{"{\\}",2},
{"@", 2},
{"|", 3},
}

Number of arguments of each operator.

Definition at line 281 of file random-expression.hh.

Referenced by vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::parse_param_(), and vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::print_random_expression_().

◆ choose_

template<typename ExpressionSet , typename RandomGenerator = std::default_random_engine>
discrete_chooser<RandomGenerator> vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::choose_ {gen_}
private

◆ es_

◆ gen_

template<typename ExpressionSet , typename RandomGenerator = std::default_random_engine>
RandomGenerator& vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::gen_
private

◆ length_

template<typename ExpressionSet , typename RandomGenerator = std::default_random_engine>
unsigned vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::length_
private

◆ operators_

template<typename ExpressionSet , typename RandomGenerator = std::default_random_engine>
std::map<std::string, float> vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::operators_
private

◆ proba_op_

template<typename ExpressionSet , typename RandomGenerator = std::default_random_engine>
std::vector<float> vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::proba_op_
private

Vector of weights associated with the operators, i.e., the probabilities to pick each operator.

Definition at line 309 of file random-expression.hh.

Referenced by vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::parse_param_(), and vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::print_random_expression_().

◆ random_weight_

template<typename ExpressionSet , typename RandomGenerator = std::default_random_engine>
random_weight<weightset_t, RandomGenerator> vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::random_weight_ {gen_, ws_}
private

◆ random_weight_params_

template<typename ExpressionSet , typename RandomGenerator = std::default_random_engine>
std::string vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::random_weight_params_
private

◆ ws_

template<typename ExpressionSet , typename RandomGenerator = std::default_random_engine>
weightset_t vcsn::detail::random_expression_impl< ExpressionSet, RandomGenerator >::ws_
private

Definition at line 275 of file random-expression.hh.


The documentation for this class was generated from the following file: