ANTLR リスナー パターンを使用した If/else ステートメント
デフォルトでは、ANTLR 4 はリスナーを生成します。 org.antlr.v4.Tool に -visitor コマンド ライン パラメータを指定すると、ANTLR は訪問者クラスも生成します。訪問者は、どのサブツリーを走査するかを選択できるため、解析ツリーの解析をより詳細に制御できます。この区別は、if/else ブロックなどの特定のサブツリーを除外する場合に特に役立ちます。技術的にはリスナーでもこのタスクに対応できますが、ビジターを使用した方がはるかにクリーンです。
ANTLR とビジター パターンを使用して if/else ステートメントを実装する主な手順は次のとおりです。
具体的な例として、次のような EvalVisitor クラスの実装を示します。 Mu 言語で if/else ステートメントを評価します:
<code class="java">public class EvalVisitor extends MuBaseVisitor<Value> { // ... @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/else ステートメントを含む Mu 入力を解析し、条件を評価し、適切なコード ブロックを実行できます。
以上がANTLR ビジターを使用して言語で If/Else ステートメントを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。