diff --git a/CPP/commandParser.cpp b/CPP/commandParser.cpp new file mode 100644 index 0000000..1f93ab4 --- /dev/null +++ b/CPP/commandParser.cpp @@ -0,0 +1,84 @@ +// Example program +// work in progress 2022.08.07 +#include +#include + +enum cmd_parser_mode_t{ + PARSING_DEVICE, + CHECK_DEVICE, + PARSING_COMMAND, + CHECK_COMMAND, + PARSING_VALUE, + CHECK_VALUE, + COMMAND_VALID +}; + +void device_check(const std::string cmd) +{ + std::cout << cmd << std::endl; +} + + + +void cmd_parser(const std::string &cmd) +{ + cmd_parser_mode_t parser_mode = PARSING_DEVICE; + std::string::size_type pos; + + for(uint32_t i = 0; i < cmd.length(); i++) { + switch(parser_mode) { + case PARSING_DEVICE: + std::cout << parser_mode << std::endl; + + pos = cmd.find('_'); + if (pos != std::string::npos) + { + device_check(cmd.substr(0, pos)); + } + else + { + return; + } + parser_mode = CHECK_DEVICE; + break; + case CHECK_DEVICE: + std::cout << parser_mode << std::endl; + parser_mode = PARSING_COMMAND; + break; + case PARSING_COMMAND: + std::cout << parser_mode << std::endl; + parser_mode = CHECK_COMMAND; + break; + case CHECK_COMMAND: + std::cout << parser_mode << std::endl; + parser_mode = PARSING_VALUE; + break; + case PARSING_VALUE: + std::cout << parser_mode << std::endl; + parser_mode = CHECK_VALUE; + break; + case CHECK_VALUE: + std::cout << parser_mode << std::endl; + parser_mode = COMMAND_VALID; + break; + case COMMAND_VALID: + std::cout << parser_mode << std::endl; + break; + default: + return; + break; + }; + } +} + + + +int main() +{ + std::string cmd_in = "DEVICE_COMMAND_VALUE"; + + cmd_parser(cmd_in); + + return 0; +} +