自定义cmdline解析算法

时间:2013-01-08 17:22:53

标签: c algorithm parsing data-structures

我正在尝试使用特定于我的应用程序的cmd的自定义cmd行的实现。

命令可以是单个单词,也可以是多个单词。 比如说。

-#version      //single word cmd

-#show input pressure  //Multiple word cmds
-#show input temp

为了解析和调用相应的函数指针,我有两个表用于上面的cmds。

表1:基本Cmd表

typedef struct CommandStruct{
  char (*f)(uint8 argn, const char **argv);
  char  *fname;
  char  *help;
}CommandStruct;

/*Help information*/
char version_help[] = " Usage:Version \n Command Displays the version information.\n";
char ShowInput_help[] = " \nUsage: \n show input pressure  --Shows input pressure \n \
show input temp -- shows input temperature \n";

 /*Table1 - Basic set of commands*/
CommandStruct basic_command_list[] =
{
   /* function name , cmd name , help information */
   {version    , "version"  , version_help },
   {clear      , "clear"    ,"Clear the screen" },
   {quit       , "quit"     ,"Exit from the prompt" },
   {ShowInput  , "show input", ShowInput_help }, 
   {NULL       ,  NULL      , NULL  }
}; 

  -#show input pressure 
  -#show input temp

以上2 cmd属于table1中的“show input”。

在当前算法中,在将输入字符串拆分为标记时,我会检查它是单个字还是双字。在单个单词的情况下,我直接调用该函数。 如果有多个单词(例如Show输入temp),我会取前2个标记(即'show input'并尝试在子表中进行过滤和搜索。(此处为table2)。

    /*Table 2 : Sub cmd for the cmds starting with 'show input' */
    CommandStruct show_input_command_list[] =
    {
       /* function name , cmd name , help information */
       {ShowInputPressure  , "pressure", ShowInput_help },
       {ShowInputTemp  , "temp",ShowInput_help},
       {NULL       ,  NULL      , NULL  }
    };

这样我继续说下面的cmds我比较并找到“show network”一旦匹配然后我搜索具有网络命令的table3。

其他一些cmd就像

show network ipaddress     
show network ipsubnet   
show network abcd<#>

set network ipaddress <#>
set network ipsubnet <#>
set network abcd <#>  <#>

所以我必须将ShowNetwork添加到表1并创建一个新表show_network_command_list []并添加另外三个cmd .etc。

如何改进此算法?如果有更好的解决方案,请建议我。感谢。

0 个答案:

没有答案