解釋器模式是一種行為型設計模式,它可以用來定義和解釋一種語言的文法,并根據文法對句子進行解釋,解釋器模式通常用于編譯器,運算式計算,正則運算式,機器人等領域,
它的基本思想是為每個符號(終結符或非終結符)創建一個類,然后使用這些類來構建抽象語法樹,
在Java中,解釋器模式的實作可以參考以下步驟:
1. 定義一個抽象運算式介面(AbstractExpression),宣告一個抽象的解釋方法,引數是一個背景關系物件(Context),
2. 定義一個終結符運算式類(TerminalExpression),實作抽象運算式介面,表示語言中的基本元素,
3. 定義一個非終結符運算式類(NonterminalExpression),實作抽象運算式介面,表示語言中的復合元素,
4. 定義一個背景關系類(Context),封裝一些全域資訊,如變數映射等,
5. 定義一個客戶端類(Client),構建一個抽象語法樹,呼叫抽象運算式的解釋方法得到結果,
下面是一個簡單的Java程式,使用解釋器模式來實作一個簡單的算術運算式求值:
在這段代碼中,定義了一個**運算式介面**,它有一個interpret()方法,用于回傳運算式的值,然后定義了五個實作了運算式介面的類:Number、Add、Subtract、Multiply和Divide,分別表示數字、加法、減法、乘法和除法,每個類都有自己的構造方法和interpret()方法的實作,
最后,在測驗類中,創建了一些復合運算式物件,并呼叫它們的interpret()方法來計算運算式的值,
// 定義一個抽象運算式介面 interface Expression { int interpret(); } // 定義一個數字類,實作運算式介面 class Number implements Expression { private int value; public Number(int value) { this.value =https://www.cnblogs.com/LJXXXX/archive/2023/03/02/ value; } @Override public int interpret() { return value; } } // 定義一個加法類,實作運算式介面 class Add implements Expression { private Expression left; private Expression right; public Add(Expression left, Expression right) { this.left = left; this.right = right; } @Override public int interpret() { return left.interpret() + right.interpret(); } } // 定義一個減法類,實作運算式介面 class Subtract implements Expression { private Expression left; private Expression right; public Subtract(Expression left, Expression right) { this.left = left; this.right = right; } @Override public int interpret() { return left.interpret() - right.interpret(); } } // 定義一個乘法類,實作運算式介面 class Multiply implements Expression { private Expression left; private Expression right; public Multiply(Expression left, Expression right) { this.left = left; this.right = right; } @Override public int interpret() { return left.interpret() * right.interpret(); } } // 定義一個除法類,實作運算式介面 class Divide implements Expression { private Expression left; private Expression right; public Divide(Expression left, Expression right) { this.left = left; this.right = right; } @Override public int interpret() throws ArithmeticException{ if (right.interpret() ==0){ throw new ArithmeticException("除數不能為零"); } return left.interpret() /right.interpret(); } } // 定義一個測驗類,創建并解釋一些簡單的算術運算式 public class InterpreterTest { public static void main(String[] args) { // 創建一些數字物件 Number one = new Number(1); Number two = new Number(2); Number three = new Number(3); Number four = new Number(4); // 創建一些復合運算式物件 Add add1 = new Add(one,two); // 表示1+2 Subtract sub1= new Subtract(three,four); // 表示3-4 Multiply mul1= new Multiply(add1,sub1); // 表示(1+2)*(3-4) Divide div1= new Divide(mul1,two); // 表示((1+2)*(3-4))/2 // 呼叫interpret方法求值 System.out.println(div1.interpret()); // 輸出-3 } }
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/545632.html
標籤:其他
上一篇:解釋器模式
