55 template <
typename... Args>
58 return value_t{std::forward<Args>(args)...};
152 template <
typename LabelSet>
155 typename LabelSet::value_t
v)
const
165 if (i.peek() ==
'\\')
170 "invalid label: unexpected \\", c);
176 template <
typename Fun>
177 static void convs(std::istream&, Fun)
179 raise(
"oneset: ranges not implemented");
190 raise(
"invalid format: ", fmt);
value_t value(Args &&...args) const
Value constructor.
static type join(const oneset &, const oneset &)
static bool is_letter(empty_t)
static constexpr bool is_special(value_t)
The special label is indistinguishable for the others.
static constexpr bool is_free()
static std::ostream & print(empty_t, std::ostream &o, format={})
static void make(std::istream &is)
value_t conv(const LabelSet &ls, typename LabelSet::value_t v) const
Convert from labelset to oneset.
A structure that implements the computation of join(V1, V2).
std::istringstream is
The input stream: the specification to translate.
static type value(oneset)
static empty_t mul(empty_t, empty_t)
static constexpr bool is_expressionset()
std::ostream & print_set(std::ostream &o, format fmt={}) const
auto hash_value(const T &v) -> decltype(std::hash< T >
Following the naming convention of Boost.
static oneset make(std::istream &is)
Build from the description in is.
static value_t conv(std::istream &i, bool=true)
static constexpr bool has_one()
Implementation of labels are ones: there is a single instance of label.
void require(bool b, Args &&...args)
If b is not verified, raise an error with args as message.
bool open(bool o) const
Does not make a lot of sense.
static size_t hash(value_t v)
std::string to_string(direction d)
Conversion to string.
static empty_t transpose(empty_t)
static bool less(const value_t, const value_t)
Whether l < r.
boost::flyweight< std::string, boost::flyweights::no_tracking, boost::flyweights::intermodule_holder > symbol
An internalized string.
static value_t conv(self_t, value_t v)
The smallest nullableset which includes LabelSet.
auto meet(const expressionset< Ctx1 > &a, const expressionset< Ctx2 > &b) -> expressionset< meet_t< Ctx1, Ctx2 >>
The meet of two expressionsets.
static bool is_one(empty_t)
static constexpr bool is_letterized()
static void convs(std::istream &, Fun)
static type value(oneset)
static bool equal(const value_t, const value_t)
Whether l == r.
static size_t size(value_t)