例
語法示例(Expr.g4)
grammar Expr;
prog: (expr NEWLINE)* ;
expr: expr ('*'|'/') expr
| expr ('+'|'-') expr
| INT
| '(' expr ')'
;
NEWLINE : [\r\n]+ ;
INT : [0-9]+ ;
生成訪問者
要生成訪問者,或禁用語法訪問者,請使用以下標誌:
-visitor generate parse tree visitor
-no-visitor don't generate parse tree visitor (default)
使用訪問者構建語法的 commandline / terminal 命令將按照下面所示的格式進行格式化,包括選擇的標誌和可能的別名:
java - jar antlr-4.5.3-complete.jar Expr.g4 -visitor
java - jar antlr-4.5.3-complete.jar Expr.g4 -no-visitor
輸出將是分別具有訪問者或沒有訪問者的解析器/詞法分析器。
輸出對於此示例,輸出將為 ExprBaseVisitor.java 和 ExprVisitor.java 。這些是你實現訪問者功能的相關 Java 檔案。建立新類並擴充套件 ExprBaseVisitor 以實現每個方法的新訪問者功能通常是理想的。
// Generated from Expr.g4 by ANTLR 4.5.3
import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
/**
* This class provides an empty implementation of {@link ExprVisitor},
* which can be extended to create a visitor which only needs to handle a subset
* of the available methods.
*
* @param <T> The return type of the visit operation. Use {@link Void} for
* operations with no return type.
*/
public class ExprBaseVisitor<T> extends AbstractParseTreeVisitor<T> implements ExprVisitor<T> {
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitProg(ExprParser.ProgContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
* <p>The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.</p>
*/
@Override public T visitExpr(ExprParser.ExprContext ctx) { return visitChildren(ctx); }
}