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个单位”。
实验要求:

  1. 提交类图;
    image

  2. 提交源代码;
    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个单位
}

}

  1. 注意编程规范。
posted @ 2024-11-22 18:26  起名字真难_qmz  阅读(12)  评论(0)    收藏  举报