If/else Pernyataan dalam ANTLR menggunakan Pendengar
Secara lalai, ANTLR 4 menjana pendengar. Walau bagaimanapun, menggunakan parameter baris arahan -visitor, sebaliknya anda boleh meminta ANTLR menghasilkan kelas pelawat. Pelawat menawarkan lebih kawalan ke atas subpokok yang dilawati, menjadikannya pilihan yang lebih baik untuk melaksanakan pernyataan if/else daripada pendengar.
Contoh Pelaksanaan
Berikut ialah contoh pelaksanaan daripada kelas IfVisitor untuk menilai pernyataan if/else:
<code class="java">public class IfVisitor extends MuBaseVisitor<Value> { // if_stat overrides @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; // evaluate this block whose expr==true this.visit(condition.stat_block()); break; } } if (!evaluatedBlock && ctx.stat_block() != null) { // evaluate the else-stat_block (if present == not null) this.visit(ctx.stat_block()); } return Value.VOID; } }</code>
Dalam pelaksanaan ini:
Kesimpulan
Menggunakan pelawat dan bukannya pendengar membolehkan kawalan yang lebih terperinci ke atas traversal pokok parse ANTLR, menjadikannya sangat sesuai untuk melaksanakan pernyataan if/else. Pendekatan ini amat berguna apabila anda perlu melaksanakan bahagian kod anda secara bersyarat berdasarkan penilaian ungkapan.
Atas ialah kandungan terperinci Bagaimanakah saya boleh melaksanakan kenyataan if/else dalam ANTLR menggunakan Pelawat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!