大实验涉及到解析字符命令,要求在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.正则表达式
利用强大的字符串处理工具正则表达式,可以省略很多工作。
关于正则表达式可以参考:
----------------------------------------------------------------------------------------------------------