11 #include <spicy/compiler/detail/codegen/production.h> 15 namespace production {
17 using Unresolved = Resolved;
44 const std::string&
name()
const {
return _name; }
78 std::optional<Production>
root()
const {
80 return _prods.at(*_root);
92 const std::map<std::string, Production>&
productions()
const {
return _prods; }
106 std::optional<Production> parent = {})
const;
119 void printTables(std::ostream& out,
bool verbose =
false);
126 std::set<Production> _computeClosure(
const Production& p);
127 bool _add(std::map<std::string, std::set<std::string>>* tbl,
const Production& dst,
128 const std::set<std::string>& src,
bool changed);
130 bool _isNullable(std::vector<Production>::const_iterator i, std::vector<Production>::const_iterator j)
const;
131 std::set<std::string> _getFirst(
const Production& p)
const;
132 std::set<std::string> _getFirstOfRhs(
const std::vector<Production>& rhs)
const;
133 std::string _productionLocation(
const Production& p)
const;
134 std::vector<std::vector<Production>> _rhss(
const Production& p)
const;
138 std::optional<std::string> _root;
141 bool _needs_look_ahead =
false;
142 std::map<std::string, Production> _prods;
143 std::map<std::string, std::string> _resolved;
144 std::vector<std::string> _nterms;
145 std::map<std::string, bool> _nullable;
146 std::map<std::string, std::set<std::string>> _first;
147 std::map<std::string, std::set<std::string>> _follow;
const Location & location() const
Definition: grammar.h:47
Definition: resolved.h:23
Definition: production.h:120
Definition: optional.h:79
bool needsLookAhead() const
Definition: grammar.h:112
const std::string & name() const
Definition: grammar.h:44
Grammar(std::string name, Location l=location::None)
Definition: grammar.h:32
const std::map< std::string, Production > & productions() const
Definition: grammar.h:92
Definition: location.h:18
std::optional< Production > root() const
Definition: grammar.h:78