#include #include int main() { Alternate variable_parser { { // Match { "x" }, // Match { "y" } } }; Alternate operator_parser { { // Match { "+" }, // Match { "-" } } }; Sequence basic_parser { { variable_parser.clone(), operator_parser.clone(), variable_parser.clone() } }; Sequence parenthesis_parser { { // Match { "(" }, basic_parser.clone(), // Match { ")" } } }; Sequence single_parenthesis_parser { { // Match { "(" }, variable_parser.clone(), // Match { ")" } } }; Alternate expression_parser { { parenthesis_parser.clone(), single_parenthesis_parser.clone(), basic_parser.clone() } }; std::string line; while (std::getline(std::cin, line)) { std::string::const_iterator current { std::cbegin(line) }; if (expression_parser.parse(current, std::cend(line))) { std::cout << "Matched!" << std::endl; } else { std::cout << "Didn't match!" << std::endl; } } }