如何解析字符串指令

大实验涉及到解析字符命令,要求在linux下使用C++。

简要的列举下需要解析的指令,不需要明白其含义。

1.任务指令有

give(human,obj),puton(obj1,obj2),goto(obj),putdown(obj),pickup(obj),opendoor(obj),putin(obj)

每条任务指令都需要robot产生动作规划

2.环境描述指令有

sort(num),color(num),size(num),location(num,loc),dooropen(num),inside(num,num),plate(num),hold(num)

需要将环境描述转化为数据结构

---------------------------------------------------------------------------------------------------------------

下面开始考虑各种解析字符串指令的方法。

1.最简单的switch方法

在这个例子中,由于指令数教少,只需提取指令支付串的前四位,使用switch case即可。

如果指令较多,无法用固定位数识别,可以先查找"("然后提取完整的指令名称,再进行switch。

在确定指令种类后,按照上述类似方法提取指令参数。

优点:简单易理解

缺点:低效率,指令种类识别时间取决于指令种类数,代码冗余。

2.进一步改进,使用hash或map等提高识别效率

建立各种指令函数,减少代码冗余。

通过hash或map建立映射

map建立教容易,但是hash映射就不太好搞了。

优点:较简单,易扩展,效率有所提高,代码冗余减少

3.分叉树识别

字符串指令逐位读入并识别,通过树建立起指令与函数的映射。

优点:结构清晰,易扩展,高效,冗余很少。

缺点:需要建立分叉识别树。

4.正则表达式

利用强大的字符串处理工具正则表达式,可以省略很多工作。

关于正则表达式可以参考:

http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html

----------------------------------------------------------------------------------------------------------

原文地址:https://www.cnblogs.com/2010Freeze/p/2442145.html