Rumah > Java > javaTutorial > Cara melaksanakan mod penterjemah untuk bahasa tersuai dan penghuraian ungkapan dalam Java

Cara melaksanakan mod penterjemah untuk bahasa tersuai dan penghuraian ungkapan dalam Java

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Lepaskan: 2023-05-11 12:46:05
ke hadapan
1716 orang telah melayarinya

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();
}
Salin selepas log masuk

Ungkapan terminal

public class NumberExpression implements Expression{
    private int num;
    public NumberExpression(int num) {
        this.num = num;
    }
    /**
     * 解释表达式
     *
     * @return
     */
    @Override
    public int interpreter() {
        return num;
    }
}
Salin selepas log masuk

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();
    }
}
Salin selepas log masuk

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());
    }
}
Salin selepas log masuk

Cara melaksanakan mod penterjemah untuk bahasa tersuai dan penghuraian ungkapan dalam Java

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!

Label berkaitan:
sumber:yisu.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Isu terkini
Bolehkah java digunakan sebagai bahagian belakang web?
daripada 1970-01-01 08:00:00
0
0
0
Tidak dapat memasang java
daripada 1970-01-01 08:00:00
0
0
0
Pasang JAVA
daripada 1970-01-01 08:00:00
0
0
0
Bagaimanakah php melaksanakan penyulitan sha1 java?
daripada 1970-01-01 08:00:00
0
0
0
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan