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);
99 void visit(const tuple_t&,
std::true_type)
override
101 raise(
me(),
": tuple is not supported");
130 v.head()->accept(*
this);
132 for (
auto c: v.tail())
137 res_ = std::move(res);
144 v.head()->accept(*
this);
146 for (
auto c: v.tail())
151 res_ = std::move(res);
159 v.sub()->accept(*
this);
166 v.sub()->accept(*
this);
183 template <
typename ExpSet>
184 typename ExpSet::value_t
196 template <
typename ExpSet>
200 const auto& e = exp->as<ExpSet>();
context_t_of< expressionset_t > context_t
expression_t operator()(const expression_t &v)
void dot_of(const mul_t &v)
Handling of a product by the dot operator.
weightset_t_of< context_t > weightset_t
typename detail::context_t_of_impl< base_t< ValueSet >>::type context_t_of
typename super_t::tuple_t tuple_t
An inner node implementing a weight.
ExpSet::value_t star_normal_form(const ExpSet &rs, const typename ExpSet::value_t &e)
Star-normal form of an expression.
typename ExpSet::const_visitor super_t
static constexpr const char * me()
Name of this algorithm, for error messages.
star_normal_form_visitor(const expressionset_t &rs)
void visit(const tuple_t &, std::true_type) override
operation_t operation_
The current operation.
expression star_normal_form(const expression &exp)
Bridge.
void box_of(const mul_t &v)
Handling of a product by the box operator.
typename weightset_t::value_t weight_t
expression_t res_
The result.
weightset_t ws_
Shorthand to the weightset.
bool any_of(const Range &r, Predicate p)
typename detail::weightset_t_of_impl< base_t< ValueSet >>::type weightset_t_of
An inner node with multiple children.
#define VCSN_RAT_UNSUPPORTED(Type)
weight_t_of< ExpSet > constant_term(const ExpSet &rs, const typename ExpSet::value_t &e)
The constant term of e.
operation_t
The type of the operator.
value_impl< detail::expression_tag > expression
typename expressionset_t::value_t expression_t