软件设计:实验17:解释器模式(选作)

实验17:解释器模式选作

本次实验属于模仿型实验,通过本次实验学生将掌握以下内容: 

1、理解解释器模式的动机,掌握该模式的结构;

2、能够利用解释器模式解决实际问题。

 

[实验任务一]:解释器模式

某机器人控制程序包含一些简单的英文指令,其文法规则如下:

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. 提交类图;

2. 提交源代码;

3. 注意编程规范。

1.

 

2.// 抽象表达式

interface Expression {

    void interpret(String command);

}

 

// 方向终结符表达式

class Direction implements Expression {

    public void interpret(String command) {

        // 解释方向命令

        System.out.print(command + " ");

    }

}

 

// 动作终结符表达式

class Action implements Expression {

    public void interpret(String command) {

        // 解释动作命令

        System.out.print(command + " ");

    }

}

 

// 距离终结符表达式

class Distance implements Expression {

    public void interpret(String command) {

        // 解释距离命令

        System.out.println(command + "个单位");

    }

}

 

// 复合表达式

class Composite implements Expression {

    private List<Expression> expressions = new ArrayList<>();

 

    public void addExpression(Expression expr) {

        expressions.add(expr);

    }

 

    public void interpret(String command) {

        for (Expression expr : expressions) {

            expr.interpret(command);

        }

    }

}

 

// 上下文

class Context {

    public String getCommand() {

        // 返回当前命令

        return "up move 5";

    }

}

 

// 客户端

public class Client {

    public static void main(String[] args) {

        Context context = new Context();

        Expression expression = new Composite();

        expression.addExpression(new Direction());

        expression.addExpression(new Action());

        expression.addExpression(new Distance());

        

        // 解释命令

        expression.interpret(context.getCommand());

    }

}

posted @ 2024-11-28 21:05  痛苦代码源  阅读(1)  评论(0编辑  收藏  举报