- #include <algorithm> 
- #include <iostream> 
- #include <regex> 
- #include <string> 
- #include <utility> 
- #include <vector> 
-   
- using namespace std; 
-   
- enum POSES // Deliminators 
- { 
- 	EQUALS, 
- 	OPEN, 
- 	CLOSE, 
- 	SPACE, 
- 	EOL, 
- 	RETURN, 
- 	TAB, 
- 	COMMENT, 
- 	POSES_SIZE 
- }; 
-   
- int main() { 
- 	const auto input = "#Comment\n\nshow_position = { x=-9 y =78 }"s; 
- 	vector<pair<POSES, string>> tokens; 
- 	const regex re{ "\\s*(?:\n|(#[^\n]*)|(\\{)|(\\})|(=)|([^{}= \t\r\n]+))" }; 
-   
- 	for_each(sregex_iterator(cbegin(input), cend(input), re), sregex_iterator(), [&](const auto& i) { 
- 		if (i[1].length() > 0U) { 
- 			tokens.emplace_back(COMMENT, i[1]); 
- 		} else if (i[2].length() > 0U) { 
- 			tokens.emplace_back(OPEN, "{"s); 
- 		} else if (i[3].length() > 0U) { 
- 			tokens.emplace_back(CLOSE, "}"s); 
- 		} else if (i[4].length() > 0U) { 
- 			tokens.emplace_back(EQUALS, "="s); 
- 		} else if (i[5].length() > 0U) { 
- 			tokens.emplace_back(POSES_SIZE, i[5]); 
- 		} 
- 	}); 
-   
- 	for (const auto& i : tokens) { 
- 		switch (i.first) { 
- 		case EQUALS: 
- 			cout << "EQUALS:     =\n"; 
- 			break; 
- 		case OPEN: 
- 			cout << "OPEN:       {\n"; 
- 			break; 
- 		case CLOSE: 
- 			cout << "CLOSE:      }\n"; 
- 			break; 
- 		case COMMENT: 
- 			cout << "COMMENT:    " << i.second << endl; 
- 			break; 
- 		case POSES_SIZE: 
- 			cout << "POSES_SIZE: " << i.second << endl; 
- 		} 
- 	} 
- } 
				I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8cmVnZXg+CiNpbmNsdWRlIDxzdHJpbmc+CiNpbmNsdWRlIDx1dGlsaXR5PgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmVudW0gUE9TRVMgLy8gRGVsaW1pbmF0b3JzCnsKCUVRVUFMUywKCU9QRU4sCglDTE9TRSwKCVNQQUNFLAoJRU9MLAoJUkVUVVJOLAoJVEFCLAoJQ09NTUVOVCwKCVBPU0VTX1NJWkUKfTsKCmludCBtYWluKCkgewoJY29uc3QgYXV0byBpbnB1dCA9ICIjQ29tbWVudFxuXG5zaG93X3Bvc2l0aW9uID0geyB4PS05IHkgPTc4IH0iczsKCXZlY3RvcjxwYWlyPFBPU0VTLCBzdHJpbmc+PiB0b2tlbnM7Cgljb25zdCByZWdleCByZXsgIlxccyooPzpcbnwoI1teXG5dKil8KFxceyl8KFxcfSl8KD0pfChbXnt9PSBcdFxyXG5dKykpIiB9OwoKCWZvcl9lYWNoKHNyZWdleF9pdGVyYXRvcihjYmVnaW4oaW5wdXQpLCBjZW5kKGlucHV0KSwgcmUpLCBzcmVnZXhfaXRlcmF0b3IoKSwgWyZdKGNvbnN0IGF1dG8mIGkpIHsKCQlpZiAoaVsxXS5sZW5ndGgoKSA+IDBVKSB7CgkJCXRva2Vucy5lbXBsYWNlX2JhY2soQ09NTUVOVCwgaVsxXSk7CgkJfSBlbHNlIGlmIChpWzJdLmxlbmd0aCgpID4gMFUpIHsKCQkJdG9rZW5zLmVtcGxhY2VfYmFjayhPUEVOLCAieyJzKTsKCQl9IGVsc2UgaWYgKGlbM10ubGVuZ3RoKCkgPiAwVSkgewoJCQl0b2tlbnMuZW1wbGFjZV9iYWNrKENMT1NFLCAifSJzKTsKCQl9IGVsc2UgaWYgKGlbNF0ubGVuZ3RoKCkgPiAwVSkgewoJCQl0b2tlbnMuZW1wbGFjZV9iYWNrKEVRVUFMUywgIj0icyk7CgkJfSBlbHNlIGlmIChpWzVdLmxlbmd0aCgpID4gMFUpIHsKCQkJdG9rZW5zLmVtcGxhY2VfYmFjayhQT1NFU19TSVpFLCBpWzVdKTsKCQl9Cgl9KTsKCglmb3IgKGNvbnN0IGF1dG8mIGkgOiB0b2tlbnMpIHsKCQlzd2l0Y2ggKGkuZmlyc3QpIHsKCQljYXNlIEVRVUFMUzoKCQkJY291dCA8PCAiRVFVQUxTOiAgICAgPVxuIjsKCQkJYnJlYWs7CgkJY2FzZSBPUEVOOgoJCQljb3V0IDw8ICJPUEVOOiAgICAgICB7XG4iOwoJCQlicmVhazsKCQljYXNlIENMT1NFOgoJCQljb3V0IDw8ICJDTE9TRTogICAgICB9XG4iOwoJCQlicmVhazsKCQljYXNlIENPTU1FTlQ6CgkJCWNvdXQgPDwgIkNPTU1FTlQ6ICAgICIgPDwgaS5zZWNvbmQgPDwgZW5kbDsKCQkJYnJlYWs7CgkJY2FzZSBQT1NFU19TSVpFOgoJCQljb3V0IDw8ICJQT1NFU19TSVpFOiAiIDw8IGkuc2Vjb25kIDw8IGVuZGw7CgkJfQoJfQp9