Pernyataan If/else dengan ANTLR 4
ANTLR 4 menggunakan pendengar secara lalai, tetapi ia turut menyokong pelawat. Pelawat memberikan lebih kawalan ke atas traversal pokok parse, menjadikannya lebih sesuai untuk melaksanakan pernyataan if/else. Untuk mendayakan pelawat, jalankan arahan berikut:
java -cp antlr-4.0-complete.jar org.antlr.v4.Tool Mu.g4 -visitor
Ini akan menjana kelas yang dipanggil MuBaseVisitor
<code class="java">public class EvalVisitor extends MuBaseVisitor<Value> { // Override visit methods for each rule that needs to be implemented // Example: visitIf_stat for handling if/else statements @Override public Value visitIf_stat(MuParser.If_statContext ctx) { List<MuParser.Condition_blockContext> conditions = ctx.condition_block(); boolean evaluatedBlock = false; for (MuParser.Condition_blockContext condition : conditions) { Value evaluated = this.visit(condition.expr()); if (evaluated.asBoolean()) { evaluatedBlock = true; this.visit(condition.stat_block()); // Evaluate the true block break; } } if (!evaluatedBlock && ctx.stat_block() != null) { this.visit(ctx.stat_block()); // Evaluate the else block } return Value.VOID; } }</code>
Di sini, kami mengulangi syarat dan menilai yang pertama benar. Jika tiada syarat yang benar dan blok lain hadir, kami menilai sebaliknya.
Untuk menggunakan pelawat ini, cipta kelas Utama untuk menghuraikan dan menilai input:
<code class="java">public class Main { public static void main(String[] args) throws Exception { MuLexer lexer = new MuLexer(new ANTLRFileStream("test.mu")); MuParser parser = new MuParser(new CommonTokenStream(lexer)); ParseTree tree = parser.parse(); EvalVisitor visitor = new EvalVisitor(); visitor.visit(tree); // Start the evaluation process } }</code>
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Pernyataan If/Else dalam ANTLR 4 menggunakan Pelawat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!