读书人

自定义语言的兑现解释器模式(四)

发布时间: 2012-08-14 10:39:57 作者: rapoo

自定义语言的实现——解释器模式(四)
18.4 完整解决方案

为了能够解释机器人控制指令,Sunny软件公司开发人员使用解释器模式来设计和实现机器人控制程序。针对五条文法规则,分别提供五个类来实现,其中终结符表达式direction、action和distance对应DirectionNode类、ActionNode类和DistanceNode类,非终结符表达式expression和composite对应SentenceNode类和AndNode类。

我们可以通过抽象语法树来表示具体解释过程,例如机器人控制指令“downrun 10 and left move20”对应的抽象语法树如图18-4所示:

自定义语言的兑现——解释器模式(四)

图18-4 机器人控制程序抽象语法树实例

机器人控制程序实例基本结构如图18-5所示:

自定义语言的兑现——解释器模式(四)

图18-5 机器人控制程序结构图

在图18-5中,AbstractNode充当抽象表达式角色,DirectionNode、ActionNode和DistanceNode充当终结符表达式角色,AndNode和SentenceNode充当非终结符表达式角色。完整代码如下所示:

工具类InstructionHandler用于对输入指令进行处理,将输入指令分割为字符串数组,将第1个、第2个和第3个单词组合成一个句子,并存入栈中;如果发现有单词“and”,则将“and”后的第1个、第2个和第3个单词组合成一个新的句子作为“and”的右表达式,并从栈中取出原先所存句子作为左表达式,然后组合成一个And节点存入栈中。依此类推,直到整个指令解析结束。

编写如下客户端测试代码:

编译并运行程序,输出结果如下:

向上移动5再向下快速移动10再向左移动5

【作者:刘伟 http://blog.csdn.net/lovelion】

读书人网 >软件架构设计

热点推荐