#include <map>
#include <sstream>
#include <stdexcept>
#include <string>
std::map<std::string, std::string> options; // global?
void parse(std::istream & cfgfile)
{
for (std::string line; std::getline(cfgfile, line); )
{
std::istringstream iss(line);
std::string id, eq, val;
bool error = false;
if (!(iss >> id))
{
error = true;
}
else if (id[0] == '#')
{
continue;
}
else if (!(iss >> eq >> val >> std::ws) || eq != "=" || iss.get() != EOF)
{
error = true;
}
if (error) { throw std::runtime_error("Parse error"); }
options[id] = val;
}
}
#include <iostream>
int main()
{
parse(std::cin);
for (const auto& p : options)
{
std::cout << "Option['" << p.first << "'] = " << p.second << '\n';
}
}
I2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHNzdHJlYW0+CiNpbmNsdWRlIDxzdGRleGNlcHQ+CiNpbmNsdWRlIDxzdHJpbmc+CgpzdGQ6Om1hcDxzdGQ6OnN0cmluZywgc3RkOjpzdHJpbmc+IG9wdGlvbnM7IC8vIGdsb2JhbD8KCnZvaWQgcGFyc2Uoc3RkOjppc3RyZWFtICYgY2ZnZmlsZSkKewogICAgZm9yIChzdGQ6OnN0cmluZyBsaW5lOyBzdGQ6OmdldGxpbmUoY2ZnZmlsZSwgbGluZSk7ICkKICAgIHsKICAgICAgICBzdGQ6OmlzdHJpbmdzdHJlYW0gaXNzKGxpbmUpOwogICAgICAgIHN0ZDo6c3RyaW5nIGlkLCBlcSwgdmFsOwoKICAgICAgICBib29sIGVycm9yID0gZmFsc2U7CgogICAgICAgIGlmICghKGlzcyA+PiBpZCkpCiAgICAgICAgewogICAgICAgICAgICBlcnJvciA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGlkWzBdID09ICcjJykKICAgICAgICB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICghKGlzcyA+PiBlcSA+PiB2YWwgPj4gc3RkOjp3cykgfHwgZXEgIT0gIj0iIHx8IGlzcy5nZXQoKSAhPSBFT0YpCiAgICAgICAgewogICAgICAgICAgICBlcnJvciA9IHRydWU7CiAgICAgICAgfQoKICAgICAgICBpZiAoZXJyb3IpIHsgdGhyb3cgc3RkOjpydW50aW1lX2Vycm9yKCJQYXJzZSBlcnJvciIpOyB9CgogICAgICAgIG9wdGlvbnNbaWRdID0gdmFsOwogICAgfQp9CgojaW5jbHVkZSA8aW9zdHJlYW0+CgppbnQgbWFpbigpCnsKCXBhcnNlKHN0ZDo6Y2luKTsKCWZvciAoY29uc3QgYXV0byYgcCA6IG9wdGlvbnMpCgl7CgkJc3RkOjpjb3V0IDw8ICJPcHRpb25bJyIgPDwgcC5maXJzdCA8PCAiJ10gPSAiIDw8IHAuc2Vjb25kIDw8ICdcbic7Cgl9Cn0=