リスナーを使用した ANTLR の If/Else ステートメント
ANTLR では、リスナーとビジターの両方を使用して if/else ステートメントを実装できます。ただし、解析ツリーを飛び回る必要がある if/else ステートメントの特定の要件のため、この実装にはビジターを使用することをお勧めします。
ビジターを使用した If/Else ステートメントの実装
訪問者を使用して if/else ステートメントを実装する方法は次のとおりです:
実装例
EvalVisitor クラスの if ステートメントの実装例を次に示します。
<code class="java">@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>
この実装は、if ステートメント内の条件を反復処理します。いずれかの条件が true と評価されると、対応する stat_block が評価され、ループが終了します。どの条件も true でない場合は、else stat_block が存在する場合はそれを評価します。
以上が## 訪問者を使用して ANTLR で if/else ステートメントを効果的に実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。