Rumah > Java > javaTutorial > Bagaimana Menghuraikan Ungkapan Aritmetik dengan ANTLR: Panduan Langkah demi Langkah?

Bagaimana Menghuraikan Ungkapan Aritmetik dengan ANTLR: Panduan Langkah demi Langkah?

Mary-Kate Olsen
Lepaskan: 2024-11-28 22:41:13
asal
592 orang telah melayarinya

How to Parse Arithmetic Expressions with ANTLR: A Step-by-Step Guide?

ANTLR: Contoh Walk-through

Walaupun laman web ANTLR menyediakan contoh tatabahasa, memahami proses menukar tatabahasa kepada kod Java boleh sukar difahami. Untuk pemahaman yang lebih jelas, mari kita teliti contoh mudah.

Mentakrif Tatabahasa

Kami akan mencipta tatabahasa yang menilai ungkapan yang melibatkan empat operator aritmetik asas ( , -, *, /) dan kurungan. Kami mentakrifkan tatabahasa dalam fail bernama Exp.g.

Exp.g

grammar Exp;

eval returns [double value]
    :    exp=additionExp {$value = $exp.value;}
    ;

additionExp returns [double value]
    :    m1=multiplyExp       {$value =  $m1.value;} 
         ( '+' m2=multiplyExp {$value += $m2.value;} 
         | '-' m2=multiplyExp {$value -= $m2.value;}
         )* 
    ;

multiplyExp returns [double value]
    :    a1=atomExp       {$value =  $a1.value;}
         ( '*' a2=atomExp {$value *= $a2.value;} 
         | '/' a2=atomExp {$value /= $a2.value;}
         )* 
    ;

atomExp returns [double value]
    :    n=Number                {$value = Double.parseDouble($n.text);}
    |    '(' exp=additionExp ')' {$value = $exp.value;}
    ;

Number
    :    ('0'..'9')+ ('.' ('0'..'9')+)?
    ;
Salin selepas log masuk

Menjana Parser dan Lexer

Menggunakan fail balang ANTLR, laksanakan arahan berikut dalam direktori yang mengandungi Exp.g:

java -cp antlr-3.2.jar org.antlr.Tool Exp.g
Salin selepas log masuk

Ini akan mencipta ExpLexer.java, ExpParser.java dan Exp. token.

Menulis Kelas Ujian

Buat ANTLRDemo.java untuk menguji tatabahasa:

ANTLRDemo.java

import org.antlr.runtime.*;

public class ANTLRDemo {
    public static void main(String[] args) throws Exception {
        ANTLRInputStream in = new ANTLRInputStream("12*(5-6)");
        ExpLexer lexer = new ExpLexer(in);
        CommonTokenStream tokens = new CommonTokenStream(lexer);
        ExpParser parser = new ExpParser(tokens);
        System.out.println(parser.eval().value); 
    }
}
Salin selepas log masuk

Menjalankan Contoh

Mula-mula, susun semula kelas parser dan lexer, kemudian jalankan ANTLRDemo:

// Recompile
javac -cp .:antlr-3.2.jar ANTLRDemo.java

// Run
java -cp .:antlr-3.2.jar ANTLRDemo
Salin selepas log masuk

Konsol kini seharusnya mengeluarkan hasil ungkapan, yang ialah -12.

Atas ialah kandungan terperinci Bagaimana Menghuraikan Ungkapan Aritmetik dengan ANTLR: Panduan Langkah demi Langkah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan