Latest web development tutorials

pola interpreter

Pola Interpreter (Penerjemah Pola) menyediakan cara untuk mengevaluasi sintaks ekspresi atau bahasa, yang termasuk jenis model. Mode ini mengimplementasikan antarmuka ekspresi yang menjelaskan konteks tertentu. Model ini digunakan dalam SQL parsing, mesin pengolahan simbol.

pengenalan

Maksud: Mengingat bahasa, mendefinisikan representasi tata bahasa, dan menentukan seorang penerjemah, juru menggunakan logo untuk menafsirkan kalimat dalam bahasa.

Solusi utama: Untuk beberapa tata bahasa tetap membangun kalimat untuk menjelaskan interpreter.

Kapan menggunakan: Jika frekuensi suatu jenis masalah cukup tinggi, mungkin layak setiap contoh dari masalah ini dinyatakan sebagai kalimat sederhana dalam bahasa.Sehingga Anda dapat membangun sebuah interpreter, penerjemah untuk menyelesaikan masalah dengan menafsirkan kalimat-kalimat ini.

Cara untuk memperbaiki: sintaks pohon anggota, definisi terminator dan non-terminal.

Kode kunci: lingkungan kelas anggota, beberapa informasi global yang terkandung luar interpreter, biasanya HashMap.

contoh aplikasi: compiler, evaluasi ekspresi aritmatika.

Keuntungan: 1, skalabilitas yang lebih baik, dan fleksibel.2, menambahkan cara baru untuk menginterpretasikan ekspresi. 3, mudah untuk menerapkan tata bahasa yang sederhana.

Kekurangan: 1, dapat mengambil keuntungan dari adegan relatif kecil.2. Untuk kompleks tata bahasa lebih sulit untuk mempertahankan. 3 menjelaskan modus yang akan menyebabkan kelas untuk memperluas. 4 menjelaskan modus menggunakan metode rekursif panggilan.

Penggunaan skenario: 1 dapat diartikan sebuah kalimat bahasa harus diwakili oleh pohon sintaks abstrak.2, beberapa masalah berulang dapat menjadi bahasa yang sederhana untuk mengekspresikan. 3, tata bahasa sederhana untuk menjelaskan kejadian.

Catatan: Anda dapat menggunakan scene yang relatif kecil, JAVA jika Anda hadapi dapat expression4J gantinya.

realisasi

Kami akan membuat dan mengimplementasikan interfaceExpressionentitas kelas antarmukaExpression.Sebagaimana didefinisikan dalam konteksTerminalExpressionjuru pokok. kelas-kelas lainOrExpression,AndExpression untuk menciptakan ekspresi modular.

InterpreterPatternDemo,kelas demonstrasi kami menggunakan kelasExpressionuntuk membuat aturan parsing dan ekspresi presentasi.

Pola Interpreter diagram UML

Langkah 1

Buat sebuah antarmuka ekspresi.

Expression.java

public interface Expression {
   public boolean interpret(String context);
}

Langkah 2

Buat kelas entitas mengimplementasikan interface di atas.

TerminalExpression.java

public class TerminalExpression implements Expression {
	
   private String data;

   public TerminalExpression(String data){
      this.data = data; 
   }

   @Override
   public boolean interpret(String context) {
      if(context.contains(data)){
         return true;
      }
      return false;
   }
}

OrExpression.java

public class OrExpression implements Expression {
	 
   private Expression expr1 = null;
   private Expression expr2 = null;

   public OrExpression(Expression expr1, Expression expr2) { 
      this.expr1 = expr1;
      this.expr2 = expr2;
   }

   @Override
   public boolean interpret(String context) {		
      return expr1.interpret(context) || expr2.interpret(context);
   }
}

AndExpression.java

public class AndExpression implements Expression {
	 
   private Expression expr1 = null;
   private Expression expr2 = null;

   public AndExpression(Expression expr1, Expression expr2) { 
      this.expr1 = expr1;
      this.expr2 = expr2;
   }

   @Override
   public boolean interpret(String context) {		
      return expr1.interpret(context) && expr2.interpret(context);
   }
}

Langkah 3

InterpreterPatternDemomenggunakan kelasExpressionuntuk membuat aturan dan mengatasinya.

InterpreterPatternDemo.java

public class InterpreterPatternDemo {

   //规则:Robert 和 John 是男性
   public static Expression getMaleExpression(){
      Expression robert = new TerminalExpression("Robert");
      Expression john = new TerminalExpression("John");
      return new OrExpression(robert, john);		
   }

   //规则:Julie 是一个已婚的女性
   public static Expression getMarriedWomanExpression(){
      Expression julie = new TerminalExpression("Julie");
      Expression married = new TerminalExpression("Married");
      return new AndExpression(julie, married);		
   }

   public static void main(String[] args) {
      Expression isMale = getMaleExpression();
      Expression isMarriedWoman = getMarriedWomanExpression();

      System.out.println("John is male? " + isMale.interpret("John"));
      System.out.println("Julie is a married women? " 
      + isMarriedWoman.interpret("Married Julie"));
   }
}

Langkah 4

Verifikasi output.

John adalah laki-laki? Benar
Julie adalah perempuan yang sudah menikah? Benar