10 #include <hilti/base/util.h> 12 #include <spicy/ast/types/unit.h> 13 #include <spicy/compiler/detail/codegen/production.h> 27 const std::vector<Production>& sequence()
const {
return _prods; }
28 void add(
Production p) { _prods.push_back(std::move(p)); }
31 std::vector<std::vector<Production>> rhss()
const {
return {_prods}; };
32 std::optional<spicy::Type> type()
const {
return {}; }
33 bool nullable()
const {
return production::nullable(rhss()); }
34 bool eodOk()
const {
return nullable(); }
35 bool atomic()
const {
return false; }
36 bool supportsSynchronize()
const {
return hasSize() || (_prods.size() && _prods.front().supportsSynchronize()); }
37 std::string render()
const {
38 return hilti::util::join(hilti::util::transform(_prods, [](
const auto& p) {
return p.symbol(); }),
" ");
42 std::vector<Production> _prods;
Definition: production.h:24
Definition: production.h:120
const std::string & symbol() const
Definition: production.h:196
bool hasSize() const
Definition: production.h:185
Definition: production.h:170
Definition: sequence.h:22
std::string join(const T &l, const std::string &delim="")
Definition: util.h:181
Definition: location.h:17
ProductionBase(std::string symbol, Location l=location::None)
Definition: production.h:181