|
此处的终端可以是:串口,Telnet,SSH等等,对于单片机来说,一般我们会这么做:
- typedef bool (* callback_t)(int argc, char **argv);
- typedef struct
- {
- int cmd;
- callback_t callback;
- } console_t;
- static console_t cmd_items =
- {
- {...},
- };
- bool parser(const char *string, int length)
- {
- argc = string_seperation(string, argv)
- // loop scan cmd_items
- for (i = 0; i < (int)(sizeof(cmd_items) / sizeof(cmd_items[0])); ++i)
- {
- if(argv[0] == cmd_items[i].cmd)
- {
- if (cmd_items[i].callback)
- {
- cmd_items[i].callback(argc, argv);
- break;
- }
- }
- }
- ...
- }
复制代码
对于一般的单片机程序来说,这样处理就行了。
但是这样,对于多语言的支持是不够灵活的,要如何设计支持多语言的命令解析器呢?Linux下有yacc/lexx和flex/bison,但是对于单片机来说太大了,不太适合单片机。
找到几个其它的解析器:
LEMON
Ragel
re2c
硬汉哥,有较好的支持多语言的解析器吗?
|
|