10 #include <hilti/ast/location.h> 11 #include <hilti/base/result.h> 12 #include <hilti/global.h> 29 #include <hilti/base/type_erase.h> 31 #include <spicy/ast/types/unit-items/field.h> 37 namespace production {
43 auto field()
const {
return _value<type::unit::item::Field>(_field); }
56 auto container()
const {
return _value<type::unit::item::Field>(_container); }
62 auto forEach()
const {
return _value<type::unit::item::Field>(_for_each); }
64 void setField(
const NodeRef& n,
bool is_field_production) {
66 _is_field_production = is_field_production;
70 void setContainer(
const NodeRef& n) {
75 void setForEach(
const NodeRef& n) {
92 bool _is_field_production =
false;
98 #include <spicy/autogen/__production.h> 103 extern std::string to_string(
const Production& p);
109 extern int64_t tokenID(
const std::string& p);
123 template<typename T, typename std::enable_if_t<std::is_base_of<trait::isProduction, T>::value>* =
nullptr>
136 explicit operator std::string()
const {
return to_string(*
this); }
140 inline std::ostream& operator<<(std::ostream& out,
const Production& p) {
150 return p1.symbol() == p2.symbol();
154 inline bool operator<(
const Production& p1,
const Production& p2) {
return p1.symbol() < p2.symbol(); }
156 namespace production {
161 extern bool nullable(
const std::vector<std::vector<Production>>& rhss);
182 : _symbol(
std::move(symbol)), _location(
std::move(l)), _meta(new production::
Meta()) {}
189 return meta().field() &&
AttributeSet::find(meta().field()->attributes(),
"&synchronize");
196 const std::string&
symbol()
const {
return _symbol; }
202 std::optional<Expression>
filter()
const {
return _filter; }
205 void setFilter(
const Expression& filter) { _filter = filter; }
208 std::optional<Expression>
sink()
const {
return _sink; }
211 void setSink(
const Expression& sink) { _sink = sink; }
222 void _setMetaInstance(std::shared_ptr<production::Meta> m) { _meta = std::move(m); }
227 std::optional<Expression> _filter;
228 std::optional<Expression> _sink;
229 std::shared_ptr<production::Meta> _meta;
Definition: production.h:22
const production::Meta & meta() const
Definition: production.h:214
void setSink(const Expression &sink)
Definition: production.h:211
Definition: production.h:24
void setSymbol(const std::string &s)
Definition: production.h:199
Definition: production.h:120
Definition: optional.h:79
void setMeta(production::Meta m)
Definition: production.h:217
const std::string & symbol() const
Definition: production.h:196
bool maySynchronize() const
Definition: production.h:188
bool hasSize() const
Definition: production.h:185
Definition: production.h:170
Production(T t)
Definition: production.h:124
Definition: production.h:25
Definition: production.h:23
Definition: optional-ref.h:22
void setFilter(const Expression &filter)
Definition: production.h:205
std::optional< Expression > sink() const
Definition: production.h:208
std::shared_ptr< production::Meta > _metaInstance() const
Definition: production.h:220
const Location & location() const
Definition: production.h:193
std::optional< Attribute > find(std::string_view tag) const
Definition: attribute.h:190
std::optional< Expression > filter() const
Definition: production.h:202
Definition: node_ref.h:44
Definition: location.h:17
Definition: location.h:86
ProductionBase(std::string symbol, Location l=location::None)
Definition: production.h:181