23 Mode Desain Bab 15: Mode Interpreter Java
Definisi: Diberi bahasa, tentukan representasi tata bahasanya, dan tentukan seorang penerjemah yang menggunakan representasi untuk menafsirkan kalimat dalam bahasa.
Jenis: Pola perilaku
Diagram kelas:
Mode interpreter adalah mode yang relatif jarang digunakan, dan saya belum pernah menggunakan mode ini sebelumnya. Mari kita lihat mode interpreter.
Struktur Mode Penerjemah
Interpreter Abstrak: Deklarasikan antarmuka abstrak (atau kelas abstrak) yang harus diimplementasikan oleh semua ekspresi konkret. Antarmuka terutama metode interpret (), disebut operasi penjelasan. Tugas interpretasi spesifik diselesaikan oleh berbagai kelas implementasinya, dan penerjemah spesifik diselesaikan oleh terminalexpression Interpreter Terminator dan masing-masing nonterspresi nonteralexpression nonterpreter non-terminal.
Ekspresi Terminator: Mengimplementasikan operasi interpretasi yang terkait dengan elemen dalam tata bahasa. Biasanya, hanya ada satu ekspresi terminator dalam pola interpreter, tetapi ada banyak contoh, sesuai dengan terminator yang berbeda. Setengah dari Terminator adalah unit operasi dalam tata bahasa. Misalnya, ada rumus sederhana R = R1+R2, di mana R1 dan R2 adalah terminator, dan penerjemah yang sesuai yang mengurai R1 dan R2 adalah terminator.
Ekspresi non-terminal: Setiap aturan dalam tata bahasa sesuai dengan ekspresi non-terminal. Ekspresi non-terminal umumnya operator atau kata kunci lain dalam tata bahasa. Misalnya, dalam rumus R = R1 + R2, + adalah karakter non-terminal, dan penerjemah parsing + adalah karakter non-terminal. Ekspresi nonterminal meningkat sesuai dengan kompleksitas logika, dan pada prinsipnya setiap aturan tata bahasa sesuai dengan ekspresi nonterminal.
Peran Lingkungan: Tugas peran ini umumnya digunakan untuk menyimpan nilai -nilai spesifik yang sesuai dengan masing -masing terminator dalam tata bahasa, seperti R = R1+R2. Kami menetapkan 100 hingga R1 dan 200 hingga R2. Informasi ini perlu disimpan dalam peran lingkungan. Dalam banyak kasus, kami menggunakan peta untuk bertindak karena peran lingkungan sudah cukup.
Implementasi Kode
konteks kelas {} abstrak ekspresi kelas {interpreter objek abstrak publik (konteks ctx); } kelas terminalExpression memperluas ekspresi {interpreter objek publik (konteks ctx) {return null; }} kelas nonterteralexpression memperluas ekspresi {nonterteralExpression publik (ekspresi ... ekspresi) {} interpreter objek publik (konteks ctx) {return null; }} klien kelas publik {public static void main (string [] args) {string ekspresi = ""; char [] chararray = ekspresi.tochararray (); Konteks ctx = konteks baru (); Stack <pekspresi> stack = stack baru <presi> (); untuk (int i = 0; i <chararray.length; i ++) {// buat penilaian sintaks dan panggilan secara rekursif} ekspresi exp = stack.pop (); exp.intepreter (CTX); }}Bagian kode dari rekursi tata bahasa perlu diimplementasikan sesuai dengan situasi tertentu, sehingga tidak tercermin dalam kode. Ekspresi abstrak adalah kunci untuk menghasilkan koleksi tata bahasa. Setiap ekspresi non-terminal menafsirkan unit sintaksis minimal, dan kemudian secara rekursif menggabungkan unit sintaks ini menjadi tata bahasa lengkap. Ini adalah pola penerjemah.
Keuntungan dan Kekurangan Mode Interpreter
Interpreter adalah alat analisis sintaks sederhana. Keuntungan yang paling signifikan adalah ekstensibilitasnya. Memodifikasi aturan sintaks hanya perlu memodifikasi karakter non-terminal yang sesuai. Jika Anda memperluas sintaks, Anda hanya perlu menambahkan karakter non-terminal.
Namun, pola interpreter akan menyebabkan kelas berkembang, dan setiap sintaks perlu menghasilkan ekspresi non-terminal. Ketika aturan sintaks relatif kompleks, sejumlah besar file kelas dapat dihasilkan, yang membawa banyak masalah untuk pemeliharaan. Pada saat yang sama, karena metode panggilan rekursif diadopsi, setiap ekspresi non-terminal hanya peduli dengan ekspresi yang terkait dengan dirinya sendiri. Setiap ekspresi perlu mengetahui hasil akhir dan harus bersifat rekursif. Apakah itu bahasa yang berorientasi objek atau bahasa yang berorientasi pada proses, rekursi adalah cara yang tidak direkomendasikan. Karena penggunaan banyak loop dan rekursi, efisiensi adalah masalah yang tidak dapat diabaikan. Terutama ketika digunakan untuk menafsirkan kompleks penguraian, sintaksis yang panjang, efisiensi tidak tertahankan.
Skenario yang berlaku untuk mode juru bahasa
Mode interpreter dapat digunakan dalam kasus berikut:
Ada aturan sintaksis sederhana, seperti pernyataan SQL. Jika kita perlu melakukan konversi RM berdasarkan pernyataan SQL, kita dapat menggunakan pola interpreter untuk menafsirkan pernyataan.
Beberapa masalah berulang, seperti empat operasi penambahan, pengurangan, perkalian dan pembagian, tetapi formulas berbeda setiap saat. Kadang-kadang itu adalah A+BC*D, kadang-kadang itu adalah*B+CD, dll. Rumus selalu berubah, tetapi semuanya dihubungkan oleh empat karakter non-terminal dari penambahan, pengurangan, perkalian dan pembagian. Saat ini, kita dapat menggunakan mode interpreter.
Hal -hal yang perlu diperhatikan
Mode interpreter benar -benar merupakan mode yang relatif jarang digunakan karena terlalu merepotkan untuk mempertahankannya. Bayangkan bahwa jika sekelompok penerjemah non-terminal tidak terbiasa dengan aturan tata bahasa sebelumnya, atau tata bahasa sangat sederhana, akan sulit untuk memahami logikanya. Mode interpreter jarang digunakan dalam pengembangan sistem aktual karena dapat menyebabkan masalah seperti efisiensi, kinerja, dan pemeliharaan.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.