parent
a0ac5e7393
commit
657463b048
@ -0,0 +1,84 @@
|
||||
// Example program
|
||||
// work in progress 2022.08.07
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
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;
|
||||
}
|
||||
|
Loading…
Reference in new issue