打印

用什么架构来解析字符串命令行比较好

[复制链接]
6061|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
donkey89|  楼主 | 2010-10-25 09:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 donkey89 于 2010-10-25 09:49 编辑

我的两块板子都是支持串口输入命令行的.我一直用switch这样的方法来判断哪个命令应该调用哪个模块,不过觉得这种方法相当的繁琐,不知道有没有更好的方**
用switch的简单流程如下:
1.收到字符串以后,分离出命令字符串
2.查表,得到命令字符串对应的功能号
3.用switch判断功能号,然后跳转到相应的模块执行.

相关帖子

沙发
liang7143| | 2010-10-25 11:19 | 只看该作者
用这种方法其实挺不错的~~简单明了~~
如果命令,switch语句太长~~
可以尝试使用转移表~
使用转移表,代码简洁~~但是出错~会更难诊断~

使用特权

评论回复
板凳
ayb_ice| | 2010-10-25 11:45 | 只看该作者
函数指针

使用特权

评论回复
地板
donkey89|  楼主 | 2010-10-25 18:55 | 只看该作者
自己顶一下

使用特权

评论回复
5
shell.albert| | 2010-10-25 21:09 | 只看该作者
多的分支用switch,少的用if-then
但是这样会出一个问题,就是优先级的问题,在最前面的会有大的概率,在最后的会有小的概率,所以要找到一种算法,来实现自动平衡或者是动态优先级调整什么的。

使用特权

评论回复
6
donkey89|  楼主 | 2010-11-17 08:24 | 只看该作者
最后顶一下

使用特权

评论回复
7
xixihaha0| | 2010-11-17 16:42 | 只看该作者
我目前也是楼主这样做的

使用特权

评论回复
8
xixihaha0| | 2010-11-17 16:43 | 只看该作者
查找命令 分离,还有一种方法,就是可以参照u-boot的命令体系的处理,采用函数指针,用结构体来封装

使用特权

评论回复
9
coody| | 2010-11-17 16:43 | 只看该作者
命令表,指针数组,命令影射。。。

使用特权

评论回复
10
dong_abc| | 2010-11-17 21:49 | 只看该作者

使用特权

评论回复
11
HWM| | 2010-11-17 22:35 | 只看该作者
“字符串命令行”自然是采用分杈树结构识别(每片叶子一个处理过程)。如是命令格式是固定话,实现方式采用分杈语句(即switch)为最佳。

使用特权

评论回复
12
sinanjj| | 2010-11-17 22:46 | 只看该作者
处理at指令集的时候要用到.



最好弄个开源的库.


如果我下一步需要就弄个.




不过目前看, 用的at指令就那几个.....随便写写就写出来了.....到时候我写篇记录吧....

使用特权

评论回复
13
highgear| | 2010-11-17 23:25 | 只看该作者
如果命令少, 那么用顺序比较, 然后用 switch-case 或者用函数指针数组执行相应的功能。

如果命令多而复杂, 就必须考虑效率。11楼 hwm 的分杈树结构是用来处理复合命令的惯常方法; 而命令解析查找, 则可以用 hash 算法构成 hash table, 可以快速的查找字符串, 具体做法是: 事先把每个命令用 hash 算法生成一个16/32位的整数, 形成一个hash table 数组, 运行时把得到的命令通过hash运算映射成一个整数, 可以在hash table 里用二分法快速查找。

使用特权

评论回复
14
QuakeGod| | 2010-11-17 23:50 | 只看该作者
同意13楼 highgear,
hash就是散列,如果命令比较少,也可以只生成8位的整数,运算量更少,
在做字符串比较和查找的时候,hash算法的效率很高,linux里用得比较多,很多搜索引擎也使用这个算法。
但是补充一下,hash算法并不是一对一的对应关系,有可能两个字符串对应同一个hash值,所以要多加一点处理,在hash值相等后,还要判断字符串是否真的相等,另外,也可能会有两个命令的hash值是相等的,要考虑进去。
还有,在使用hash算法后,即便不使用二分法查找,依次比较,速度也是很快的,因为整数比较的速度要比字符串比较的速度快多了。

使用特权

评论回复
15
HWM| | 2010-11-18 00:24 | 只看该作者
“字符串命令行”通常是扫描输入地,在其输入过程中便就可利用分析树(即上述分杈树)分析命令。也就是说,命令字符串输入完毕就已经得到了相应的处理入口,根本不需额外查询。

另外,“字符串命令行”的识别过程也不需要特别快的速度,因为命令的输入本来就是个“慢速”过程。利用分析树完全是考虑了命令字符串的串行输入特性。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

241

主题

1609

帖子

1

粉丝