File attributes.hpp¶
File List > backends > cxx > include > zmbt > expr > attributes.hpp
Go to the documentation of this file
#ifndef ZMBT_EXPR_KEYWORD_ATTR_HPP_
#define ZMBT_EXPR_KEYWORD_ATTR_HPP_
#include <cstdint>
#include "zmbt/expr/keyword.hpp"
namespace zmbt {
namespace lang {
namespace attr
{
constexpr std::uint32_t is_const = 1 << 1;
constexpr std::uint32_t is_unary = 1 << 2;
constexpr std::uint32_t is_binary = 1 << 3;
constexpr std::uint32_t is_variadic = 1 << 4;
constexpr std::uint32_t is_predicate = 1 << 5;
constexpr std::uint32_t is_operator = 1 << 6;
constexpr std::uint32_t is_hiord = 1 << 7;
constexpr std::uint32_t is_noop = 1 << 8;
constexpr std::uint32_t is_literal = 1 << 9;
constexpr std::uint32_t is_quote = 1 << 10;
constexpr std::uint32_t is_preproc = 1 << 11;
constexpr std::uint32_t is_error = 1 << 12;
constexpr std::uint32_t is_pipe = 1 << 13;
constexpr std::uint32_t is_fork = 1 << 14;
constexpr std::uint32_t is_overload = 1 << 15;
constexpr std::uint32_t is_infix_chain = 1 << 16;
constexpr std::uint32_t is_autogen = 1 << 17;
}
constexpr std::uint32_t attributes(Keyword const& k)
{
using namespace attr;
switch (k)
{
case Keyword::Literal: return is_unary | is_literal;
case Keyword::Void: return is_unary;
case Keyword::LazyToken: return is_unary;
case Keyword::Noop: return is_const | is_autogen | is_noop;
case Keyword::Null: return is_const | is_autogen;
case Keyword::True: return is_const | is_predicate | is_autogen;
case Keyword::False: return is_const | is_predicate | is_autogen;
case Keyword::Pi: return is_const | is_autogen;
case Keyword::E: return is_const | is_autogen;
case Keyword::Inf: return is_const | is_autogen;
case Keyword::Eps: return is_const | is_autogen;
case Keyword::NaN: return is_const | is_autogen;
case Keyword::Thread: return is_const | is_autogen;
case Keyword::Sin: return is_unary | is_autogen;
case Keyword::Cos: return is_unary | is_autogen;
case Keyword::Tan: return is_unary | is_autogen;
case Keyword::Asin: return is_unary | is_autogen;
case Keyword::Acos: return is_unary | is_autogen;
case Keyword::Atan: return is_unary | is_autogen;
case Keyword::Sinh: return is_unary | is_autogen;
case Keyword::Cosh: return is_unary | is_autogen;
case Keyword::Tanh: return is_unary | is_autogen;
case Keyword::Asinh: return is_unary | is_autogen;
case Keyword::Acosh: return is_unary | is_autogen;
case Keyword::Atanh: return is_unary | is_autogen;
case Keyword::Exp: return is_unary | is_autogen;
case Keyword::Erf: return is_unary | is_autogen;
case Keyword::Erfc: return is_unary | is_autogen;
case Keyword::Gamma: return is_unary | is_autogen;
case Keyword::Abs: return is_unary | is_autogen;
case Keyword::Ceil: return is_unary | is_autogen;
case Keyword::Floor: return is_unary | is_autogen;
case Keyword::Round: return is_unary | is_autogen;
case Keyword::Sqrt: return is_unary | is_autogen;
case Keyword::Sign: return is_unary | is_autogen;
case Keyword::Neg: return is_unary | is_operator;
case Keyword::Add: return is_binary | is_operator;
case Keyword::Sub: return is_binary | is_operator;
case Keyword::Mul: return is_binary | is_operator;
case Keyword::Div: return is_binary | is_operator;
case Keyword::Pow: return is_binary | is_operator;
case Keyword::Log: return is_binary | is_operator;
case Keyword::Mod: return is_binary | is_operator;
case Keyword::Quot: return is_binary | is_operator;
case Keyword::BitNot: return is_unary | is_operator;
case Keyword::BitAnd: return is_binary | is_operator;
case Keyword::BitOr: return is_binary | is_operator;
case Keyword::BitXor: return is_binary | is_operator;
case Keyword::Lshift: return is_binary | is_operator;
case Keyword::Rshift: return is_binary | is_operator;
case Keyword::Eq: return is_binary | is_predicate | is_operator;
case Keyword::Ne: return is_binary | is_predicate | is_operator;
case Keyword::Lt: return is_binary | is_predicate | is_operator;
case Keyword::Le: return is_binary | is_predicate | is_operator;
case Keyword::Gt: return is_binary | is_predicate | is_operator;
case Keyword::Ge: return is_binary | is_predicate | is_operator;
case Keyword::Near: return is_binary | is_predicate;
case Keyword::Union: return is_binary;
case Keyword::Intersect: return is_binary;
case Keyword::Diff: return is_binary;
case Keyword::SetEq: return is_binary | is_predicate | is_operator;
case Keyword::Subset: return is_binary | is_predicate | is_operator;
case Keyword::Superset: return is_binary | is_predicate | is_operator;
case Keyword::PSubset: return is_binary | is_predicate | is_operator;
case Keyword::PSuperset: return is_binary | is_predicate | is_operator;
case Keyword::In: return is_binary | is_predicate | is_operator;
case Keyword::NotIn: return is_binary | is_predicate | is_operator;
case Keyword::Ni: return is_binary | is_predicate | is_operator;
case Keyword::NotNi: return is_binary | is_predicate | is_operator;
case Keyword::Bool: return is_unary | is_predicate | is_operator;
case Keyword::Not: return is_unary | is_predicate | is_operator;
case Keyword::And: return is_binary | is_operator;
case Keyword::Or: return is_binary | is_operator;
case Keyword::Id: return is_unary | is_autogen;
case Keyword::Transp: return is_unary;
case Keyword::Cartesian: return is_unary;
case Keyword::Reverse: return is_unary;
case Keyword::Uniques: return is_unary;
case Keyword::Items: return is_unary;
case Keyword::Keys: return is_unary;
case Keyword::Values: return is_unary;
case Keyword::Enumerate: return is_unary;
case Keyword::Flatten: return is_unary;
case Keyword::ToList: return is_unary | is_autogen;
case Keyword::Arange: return is_unary;
case Keyword::Parse: return is_unary | is_autogen;
case Keyword::Str: return is_unary | is_autogen;
case Keyword::Re: return is_binary | is_predicate;
case Keyword::Fmt: return is_variadic;
case Keyword::Card: return is_unary;
case Keyword::Size: return is_unary;
case Keyword::Sum: return is_unary;
case Keyword::Prod: return is_unary;
case Keyword::Avg: return is_unary;
case Keyword::Slide: return is_binary;
case Keyword::Stride: return is_binary;
case Keyword::Chunks: return is_binary;
case Keyword::Repeat: return is_binary;
case Keyword::Cat: return is_binary;
case Keyword::Push: return is_binary;
case Keyword::At: return is_binary;
case Keyword::Del: return is_binary;
case Keyword::Lookup: return is_binary;
case Keyword::Cast: return is_unary;
case Keyword::Uncast: return is_unary;
case Keyword::Fold: return is_binary | is_hiord;
case Keyword::Map: return is_binary | is_hiord;
case Keyword::Filter: return is_binary | is_hiord;
case Keyword::Count: return is_binary | is_hiord;
case Keyword::Each: return is_binary | is_predicate | is_hiord;
case Keyword::Sort: return is_binary | is_hiord;
case Keyword::Find: return is_binary | is_hiord;
case Keyword::FindPtr: return is_binary | is_hiord;
case Keyword::FindIdx: return is_binary | is_hiord;
case Keyword::Min: return is_binary | is_hiord;
case Keyword::Max: return is_binary | is_hiord;
case Keyword::Argmin: return is_binary | is_hiord;
case Keyword::Argmax: return is_binary | is_hiord;
case Keyword::Recur: return is_binary | is_hiord;
case Keyword::Unfold: return is_binary | is_hiord;
case Keyword::Op: return is_unary | is_hiord | is_overload;
case Keyword::Bind: return is_binary | is_hiord;
case Keyword::Fn: return is_binary | is_hiord;
case Keyword::Link: return is_binary | is_hiord;
case Keyword::Any: return is_variadic | is_predicate | is_hiord;
case Keyword::All: return is_variadic | is_predicate | is_hiord;
case Keyword::Saturate: return is_variadic | is_predicate | is_hiord;
case Keyword::Pipe: return is_variadic | is_hiord | is_pipe;
case Keyword::Tuple: return is_variadic | is_hiord;
case Keyword::Fork: return is_variadic | is_hiord | is_fork;
case Keyword::Flip: return is_binary | is_hiord;
case Keyword::Dbg: return is_binary | is_hiord;
case Keyword::Eval: return is_binary | is_hiord;
case Keyword::Try: return is_binary | is_hiord;
case Keyword::Kwrd: return is_unary | is_hiord;
case Keyword::Prms: return is_unary | is_hiord;
case Keyword::Q: return is_binary | is_autogen | is_quote;
case Keyword::D: return is_binary | is_autogen;
case Keyword::Err: return is_unary | is_autogen | is_error;
case Keyword::IsErr: return is_unary | is_autogen;
case Keyword::Assert: return is_binary;
case Keyword::Trace: return is_binary;
case Keyword::PreProc: return is_binary | is_autogen | is_preproc;
default:
return 0U;
}
}
} // namespace lang
} // namespace zmbt
#endif // ZMBT_MODEL_KEYWORD_HPP_