Token() = default;
 Token(const std::string& s) { type = s; } // Assign type via "=" from string

start symbol implicitly from bnf
validate bnf: no empty types or values, or empty target lists

map -> unordered_map
set -> unordered_set