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
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
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.
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.
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.
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!