9 #ifndef EMP_CONFIG_PARSER_H 10 #define EMP_CONFIG_PARSER_H 15 #include "../base/vector.h" 32 std::map<std::string, int> state_ids;
35 int ToStateID(
const std::string & name) {
36 auto state_ptr = state_ids.find(name);
37 if (state_ptr == state_ids.end())
return next_state++;
38 return state_ptr->second;
40 int ToStateID(
int state_id)
const {
return state_id; }
43 int StringToID(
const std::string name) {
45 return ToStateID(name);
50 for (
int i = 0; i < (int) str_rhs.
size(); i++) {
51 rhs[i] = StringToID(str_rhs[i]);
67 : lexer(in_stream), next_state(lexer.GetMaxToken()) { ; }
71 template <
typename T1,
typename T2>
73 return AddRule_impl( ToStateID(std::forward<T1>(state)), ToRHS(std::forward<T2>(rhs)) );
int result_id
Definition: ConfigParser.h:22
ParseRule(int id, const emp::vector< int > &_p)
Definition: ConfigParser.h:25
emp::vector< int > pattern
Definition: ConfigParser.h:23
ConfigParser(std::istream &in_stream)
Definition: ConfigParser.h:66
Definition: ConfigParser.h:28
static void slice(const std::string &in_string, emp::vector< std::string > &out_set, char delim='\n')
Cut up a string based on the provided delimitor; fill them in to the provided vector.
Definition: string_utils.h:421
A rule for how parsing should work.
Definition: ConfigParser.h:21
size_t size() const
Definition: vector.h:151
void emplace_back(ARGS &&...args)
Definition: vector.h:219
~ConfigParser()
Definition: ConfigParser.h:68
If we are in emscripten, make sure to include the header.
Definition: array.h:37
Definition: ConfigLexer.h:24
int AddRule(T1 &&state, const emp::vector< int > &rhs)
Definition: ConfigParser.h:72