11 #include <spicy/ast/types/unit.h> 12 #include <spicy/compiler/detail/codegen/production.h> 16 namespace look_ahead {
17 enum class Default { First, Second, None };
29 _alternatives(std::make_pair(std::move(alt1), std::move(alt2))),
31 _lahs(
new std::pair<std::set<Production>, std::set<Production>>) {}
34 :
LookAhead(symbol, std::move(alt1), std::move(alt2), look_ahead::Default::None, l) {}
37 const std::pair<Production, Production>&
alternatives()
const {
return _alternatives; }
40 look_ahead::Default
default_()
const {
return _default; }
47 const std::pair<std::set<Production>, std::set<Production>>&
lookAheads()
const {
return *_lahs; }
53 void setLookAheads(std::pair<std::set<Production>, std::set<Production>>&& lahs) { *_lahs = std::move(lahs); }
56 std::vector<std::vector<Production>> rhss()
const {
return {{_alternatives.first}, {_alternatives.second}}; }
57 std::optional<spicy::Type> type()
const {
return {}; }
58 bool nullable()
const {
return production::nullable(rhss()); }
59 bool eodOk()
const {
return nullable(); }
60 bool atomic()
const {
return false; }
61 bool supportsSynchronize()
const;
62 std::string render()
const;
65 std::pair<Production, Production> _alternatives;
66 look_ahead::Default _default;
70 std::shared_ptr<std::pair<std::set<Production>, std::set<Production>>> _lahs;
void setLookAheads(std::pair< std::set< Production >, std::set< Production >> &&lahs)
Definition: look-ahead.h:53
Definition: look-ahead.h:24
Definition: production.h:24
const std::pair< Production, Production > & alternatives() const
Definition: look-ahead.h:37
Definition: production.h:120
Definition: production.h:170
Definition: location.h:17
const std::pair< std::set< Production >, std::set< Production > > & lookAheads() const
Definition: look-ahead.h:47
look_ahead::Default default_() const
Definition: look-ahead.h:40