


Cara melaksanakan mod penterjemah untuk bahasa tersuai dan penghuraian ungkapan dalam Java
Pengenalan
Corak Jurubahasa Java (corak Jurubahasa) ialah corak reka bentuk tingkah laku yang mentakrifkan perwakilan sintaks bahasa dan mentakrifkan jurubahasa untuk mentafsir sintaks.
Inti pola ini ialah jurubahasa (Interpreter), yang mentakrifkan antara muka ungkapan dan kelas pelaksanaan ungkapan tertentu Antara muka ungkapan mentakrifkan kaedah tafsiran, dan kelas pelaksanaan ungkapan khusus melaksanakan kaedah tafsiran
Mod jurubahasa Java merangkumi 4 peranan berikut:
Ungkapan Abstrak (Ungkapan Abstrak): mentakrifkan apa yang perlu dilaksanakan oleh jurubahasa Antara muka biasanya mengandungi kaedah jurubahasa (jurubahasa) untuk mentafsir ungkapan
Ungkapan Terminal: melaksanakan kaedah penterjemah antara muka ungkapan abstrak untuk tafsiran Simbol terminal bahasa, seperti pembolehubah, pemalar, dsb.
-
Ungkapan Bukan Terminal: melaksanakan kaedah tafsiran antara muka ungkapan abstrak, biasanya terdiri daripada berbilang Gabungan ungkapan terminal, digunakan untuk mentafsir simbol bukan terminal dalam bahasa, seperti operator aritmetik, operator logik, dsb.
Konteks: Mengandungi bahasa yang perlu ditafsirkan Maklumat konteks, seperti pembolehubah, pemalar, dll. Dalam mod penterjemah, objek persekitaran biasanya dihantar sebagai parameter kepada objek penterjemah
Pelaksanaan
Berikut ialah Contoh mudah ungkapan yang digunakan untuk menerangkan penambahan dan penolakan
Ungkapan abstrak
public interface Expression { /** * 解释表达式 * * @return */ int interpreter(); }
Ungkapan terminal
public class NumberExpression implements Expression{ private int num; public NumberExpression(int num) { this.num = num; } /** * 解释表达式 * * @return */ @Override public int interpreter() { return num; } }
Ungkapan bukan terminal
public class AddExpression implements Expression { /** * 左表达式 */ private Expression leftExpression; /** * 右表达式 */ private Expression rightExpression; public AddExpression(Expression leftExpression, Expression rightExpression) { this.leftExpression = leftExpression; this.rightExpression = rightExpression; } /** * 解释表达式 * * @return */ @Override public int interpreter() { return leftExpression.interpreter() + rightExpression.interpreter(); } } public class SubtractExpression implements Expression { /** * 左表达式 */ private Expression leftExpression; /** * 右表达式 */ private Expression rightExpression; public SubtractExpression(Expression leftExpression, Expression rightExpression) { this.leftExpression = leftExpression; this.rightExpression = rightExpression; } /** * 解释表达式 * * @return */ @Override public int interpreter() { return leftExpression.interpreter() - rightExpression.interpreter(); } }
Ujian
public class Demo { public static void main(String[] args) { // 创建一个复杂表达式,用于计算5+3-2+1的结果 Expression expression = new AddExpression( new SubtractExpression( new AddExpression( new NumberExpression(5), new NumberExpression(3)), new NumberExpression(2)), new NumberExpression(1)); // 使用解释器模式来解释表达式,并输出计算结果 System.out.println(expression.interpreter()); } }
Dalam contoh di atas, kami mentakrifkan antara muka ungkapan Ungkapan (ungkapan abstrak) dan dua kelas pelaksanaan ungkapan konkrit AddExpression (ungkapan simbol bukan terminal) dan SubtractExpression (ungkapan bukan terminal) Dalam kelas AddExpression dan SubtractExpression, kami melaksanakan kaedah penterjemah masing-masing untuk mentafsir ungkapan penambahan dan penolakan, dan mentakrifkan NumberExpression (ungkapan terminal). untuk melaksanakan Ungkapan Kaedah penterjemah digunakan untuk mentafsir ungkapan angka Dalam contoh di atas, objek persekitaran tidak ditakrifkan secara eksplisit, tetapi persekitaran disimulasikan dengan mencipta objek ekspresi dan menggabungkannya
Ringkasan
Kelebihan
Kebolehlanjutan yang kuat: Mod penterjemah boleh melaksanakan gelagat baharu dengan melanjutkan ungkapan dan peraturan tatabahasa dalam bahasa Contohnya: ungkapan terminal baharu dan ungkapan bukan terminal boleh ditambah Terminal ungkapan untuk melaksanakan peraturan tatabahasa yang lebih kompleks.
Mudah untuk dilaksanakan: Mod penterjemah agak mudah untuk dilaksanakan dan hanya perlu melaksanakan ungkapan abstrak dan kelas ekspresi konkrit.
Mudah untuk menukar peraturan tatabahasa: Memandangkan corak penterjemah mewakili peraturan tatabahasa sebagai objek, anda boleh menukar peraturan tatabahasa dengan mengubah suai cara objek penterjemah digabungkan.
Kelemahan
Memerlukan bilangan kelas yang banyak: Melaksanakan bahasa yang kompleks mungkin memerlukan penentuan sejumlah besar kelas, yang akan meningkatkan kerumitan kod dan kos penyelenggaraan.
Kebolehbacaan lemah: Memandangkan mod penterjemah mewakili peraturan sintaks sebagai objek, kod mungkin tidak begitu boleh dibaca, terutamanya untuk pembangun yang tidak biasa dengan mod tersebut.
Senario aplikasi
Apabila bahasa yang perlu mentafsir dan melaksanakan peraturan tatabahasa tertentu, seperti ungkapan matematik, ungkapan biasa, dll.
Apabila peraturan sintaks bahasa perlu dilanjutkan, seperti menambah operator atau arahan baharu.
Apabila logik tafsiran kompleks perlu dirangkumkan dan dilaksanakan dalam kod, seperti penyusunan Jurubahasa, penghurai, dsb.
Nota
Cuba jangan gunakan mod penterjemah dalam modul penting, jika tidak, penyelenggaraan akan menjadi masalah besar dalam projek Bahasa skrip seperti shell, JRuby, Groovy boleh digunakan untuk menggantikan mod penterjemah untuk mengimbangi kekurangan bahasa yang disusun Java.
Atas ialah kandungan terperinci Cara melaksanakan mod penterjemah untuk bahasa tersuai dan penghuraian ungkapan dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Panduan untuk Square Root di Java. Di sini kita membincangkan cara Square Root berfungsi di Java dengan contoh dan pelaksanaan kodnya masing-masing.

Panduan Nombor Sempurna di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor Perfect dalam Java?, contoh dengan pelaksanaan kod.

Panduan untuk Penjana Nombor Rawak di Jawa. Di sini kita membincangkan Fungsi dalam Java dengan contoh dan dua Penjana berbeza dengan contoh lain.

Panduan untuk Nombor Armstrong di Jawa. Di sini kita membincangkan pengenalan kepada nombor Armstrong di java bersama-sama dengan beberapa kod.

Panduan untuk Weka di Jawa. Di sini kita membincangkan Pengenalan, cara menggunakan weka java, jenis platform, dan kelebihan dengan contoh.

Panduan untuk Nombor Smith di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor smith di Jawa? contoh dengan pelaksanaan kod.

Dalam artikel ini, kami telah menyimpan Soalan Temuduga Spring Java yang paling banyak ditanya dengan jawapan terperinci mereka. Supaya anda boleh memecahkan temuduga.

Java 8 memperkenalkan API Stream, menyediakan cara yang kuat dan ekspresif untuk memproses koleksi data. Walau bagaimanapun, soalan biasa apabila menggunakan aliran adalah: bagaimana untuk memecahkan atau kembali dari operasi foreach? Gelung tradisional membolehkan gangguan awal atau pulangan, tetapi kaedah Foreach Stream tidak menyokong secara langsung kaedah ini. Artikel ini akan menerangkan sebab -sebab dan meneroka kaedah alternatif untuk melaksanakan penamatan pramatang dalam sistem pemprosesan aliran. Bacaan Lanjut: Penambahbaikan API Java Stream Memahami aliran aliran Kaedah Foreach adalah operasi terminal yang melakukan satu operasi pada setiap elemen dalam aliran. Niat reka bentuknya adalah
