24.11.22
[实验任务一]:解释器模式
某机器人控制程序包含一些简单的英文指令,其文法规则如下:
expression ::= direction action distance | composite
composite ::= expression and expression
direction ::= ‘up’ | ‘down’ | ‘left’ | ‘right’
action ::= ‘move’ | ‘run’
distance ::= an integer //一个整数值
如输入:up move 5,则输出“向上移动5个单位”;输入:down run 10 and left move 20,则输出“向下移动10个单位再向左移动20个单位”。
实验要求:
-
提交类图;
-
提交源代码;
package org.test.ruanjiansheji.jieshiqi;
// Expression 接口
interface Expression {
void interpret();
}
// 方向操作表达式类(如 up、down、left、right)
class DirectionExpression implements Expression {
private String direction;
private String action;
private int distance;
public DirectionExpression(String direction, String action, int distance) {
this.direction = direction;
this.action = action;
this.distance = distance;
}
@Override
public void interpret() {
String actionVerb = action.equals("move") ? "移动" : "奔跑";
System.out.println("向" + direction + actionVerb + distance + "个单位");
}
}
// 复合表达式类,表示多个指令的组合
class CompositeExpression implements Expression {
private Expression expr1;
private Expression expr2;
public CompositeExpression(Expression expr1, Expression expr2) {
this.expr1 = expr1;
this.expr2 = expr2;
}
@Override
public void interpret() {
expr1.interpret();
System.out.print("再");
expr2.interpret();
}
}
// 客户端类,模拟解析并执行机器人控制指令
public class Client {
public static void main(String[] args) {
// 解析单一指令:up move 5
Expression expr1 = new DirectionExpression("上", "move", 5);
expr1.interpret(); // 输出: 向上移动5个单位
// 解析复合指令:down run 10 and left move 20
Expression expr2 = new DirectionExpression("下", "run", 10);
Expression expr3 = new DirectionExpression("左", "move", 20);
Expression composite = new CompositeExpression(expr2, expr3);
composite.interpret(); // 输出: 向下奔跑10个单位再向左移动20个单位
}
}
- 注意编程规范。