ANTLR 4의 If/else 문
ANTLR 4는 기본적으로 리스너를 사용하지만 방문자도 지원합니다. 방문자는 구문 분석 트리 탐색에 대해 더 많은 제어를 제공하므로 if/else 문을 구현하는 데 더 적합합니다. 방문자를 활성화하려면 다음 명령을 실행하세요.
java -cp antlr-4.0-complete.jar org.antlr.v4.Tool Mu.g4 -visitor
이렇게 하면 원하는 기능을 구현하도록 확장할 수 있는 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>
여기에서는 조건을 반복하고 첫 번째 참인 조건을 평가합니다. true인 조건이 없고 else 블록이 있는 경우 대신 이를 평가합니다.
이 방문자를 사용하려면 입력을 구문 분석하고 평가하는 Main 클래스를 생성합니다.
<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>
위 내용은 방문자를 사용하여 ANTLR 4에서 If/Else 문을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!