27 template <
typename ExpSet>
29 :
public ExpSet::const_visitor
36 static_assert(std::is_same<weightset_t, b>::value,
37 "star_normal_form: requires Boolean weights");
39 using weight_t =
typename weightset_t::value_t;
41 using super_t =
typename ExpSet::const_visitor;
44 constexpr
static const char*
me() {
return "star_normal_form"; }
58 return std::move(
res_);
79 v.head()->accept(*
this);
81 for (
auto c:
v.tail())
86 res_ = std::move(res);
98 virtual
void visit(const tuple_t&,
std::true_type)
override
100 raise(
me(),
": tuple is not supported");
129 v.head()->accept(*
this);
131 for (
auto c: v.tail())
136 res_ = std::move(res);
143 v.head()->accept(*
this);
145 for (
auto c: v.tail())
150 res_ = std::move(res);
158 v.sub()->accept(*
this);
165 v.sub()->accept(*
this);
182 template <
typename ExpSet>
184 typename ExpSet::value_t
196 template <
typename ExpSet>
201 const auto& e = exp->as<ExpSet>();
context_t_of< expressionset_t > context_t
operation_t
The type of the operator.
weightset_t ws_
Shorthand to the weightset.
bool any_of(const Range &r, Predicate p)
typename super_t::tuple_t tuple_t
typename ExpSet::const_visitor super_t
ExpSet::value_t star_normal_form(const ExpSet &rs, const typename ExpSet::value_t &e)
Star-normal form of an expression.
typename detail::context_t_of_impl< base_t< ValueSet >>::type context_t_of
expression_t operator()(const expression_t &v)
typename detail::weightset_t_of_impl< base_t< ValueSet >>::type weightset_t_of
static constexpr const char * me()
Name of this algorithm, for error messages.
typename expressionset_t::value_t expression_t
void dot_of(const prod_t &v)
Handling of a product by the dot operator.
typename weightset_t::value_t weight_t
virtual void visit(const tuple_t &, std::true_type) override
expression star_normal_form(const expression &exp)
Bridge.
weight_t_of< ExpSet > constant_term(const ExpSet &rs, const typename ExpSet::value_t &e)
The constant term of e.
operation_t operation_
The current operation.
expression make_expression(const ExpSet &rs, const typename ExpSet::value_t &r)
void box_of(const prod_t &v)
Handling of a product by the box operator.
weightset_t_of< context_t > weightset_t
An inner node implementing a weight.
std::shared_ptr< detail::expression_base > expression
star_normal_form_visitor(const expressionset_t &rs)
expression_t res_
The result.
An inner node with multiple children.
#define VCSN_RAT_UNSUPPORTED(Type)