Jadual Kandungan
Pengenalan
Pelaksanaan
Ringkasan
Kelebihan
Kelemahan
Senario aplikasi
Nota
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

May 11, 2023 pm 12:46 PM
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();
}
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!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Akar Kuasa Dua di Jawa Akar Kuasa Dua di Jawa Aug 30, 2024 pm 04:26 PM

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

Nombor Sempurna di Jawa Nombor Sempurna di Jawa Aug 30, 2024 pm 04:28 PM

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

Penjana Nombor Rawak di Jawa Penjana Nombor Rawak di Jawa Aug 30, 2024 pm 04:27 PM

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

Nombor Armstrong di Jawa Nombor Armstrong di Jawa Aug 30, 2024 pm 04:26 PM

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

Weka di Jawa Weka di Jawa Aug 30, 2024 pm 04:28 PM

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

Nombor Smith di Jawa Nombor Smith di Jawa Aug 30, 2024 pm 04:28 PM

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

Soalan Temuduga Java Spring Soalan Temuduga Java Spring Aug 30, 2024 pm 04:29 PM

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

Cuti atau kembali dari Java 8 Stream Foreach? Cuti atau kembali dari Java 8 Stream Foreach? Feb 07, 2025 pm 12:09 PM

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

See all articles