ParserVisitor でより具体的なエラー メッセージの行番号を取得しようとしています (antlr によって生成された解析ツリーにアクセスします)。ただし、このクラスにあるのは contextctx
だけで、 のようなことはできますが、できませctx.getText()
んgetLine()
。これを行う方法はありますか?
ctx.getPayload()
ここで使える?もしそうなら、どのように?
編集: ANTLR 4 を使用して Java ファイルを作成しています。
次のような方法で、ビジターの行番号にアクセスしようとしています。
@Override
public Type visitStatAssign(@NotNull BasicParser.StatAssignContext ctx) {
...
// some semantic error detected
int lineNo = ...
System.err.("Semantic error at line " + lineNo);
}
編集 2: 私のレクサーとパーサーのルールはかなり標準的です。たとえば、レクサーでは次のようになります。
INT : 'int' ;
CHAR : 'char' ;
BOOL : 'bool' ;
STRING : 'string' ;
...はパーサー ルールの baseType にあります。
baseType : INT | CHAR | BOOL | STRING ;