为什么Visitor类返回null?蚂蚁

问题描述

我正在尝试使用Visual Studio Code中的Java从解析器树构建AST。至此,a生成了语法,然后生成了解析器树。我想用Visitor生成AST,所以我根据给定的BaseVisitor类制作了一个特定的Visitor类。

测试类:

import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.tree.*;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.*;

public class Testear{
public static void main(String[] args) throws Exception{
    String inputFile=null;
    if(args.length>0) inputFile=args[0];
    InputStream is =system.in;
    if(inputFile!=null){
        is=new FileInputStream(inputFile);
    }

    ANTLRInputStream input = new ANTLRInputStream(is);
    ExprLexer lexer = new ExprLexer(input);
    CommonTokenStream tokens=new CommonTokenStream(lexer);
    ExprParser parser = new ExprParser(tokens);
    parser.setBuildParseTree(true);
    ParseTree tree = parser.prog();

    System.out.println(tree.toStringTree(parser));

    Visitor nv = new Visitor();
    //HERE IT RETURNS NULL
    String result= nv.visit(tree);

    System.out.println("The result is: " + result);
}
}

访问者类别:

public class Visitor extends ExprBaseVisitor<String>{

@Override
public String visitPalabrasreservadas(ExprParser.PalabrasreservadasContext ctx){
    //HERE THE VALUE IS THE CORRECT ONE
    System.out.println("Result 1 : " + ctx.PALABRASRESERVADAS().getText());
    return ctx.PALABRASRESERVADAS().getText();
}

@Override
public String visitNombresfuncion(ExprParser.NombresfuncionContext ctx){
    System.out.println("Result 2 : " + ctx.NOMBRESFUNCION().getText());
    return ctx.NOMBRESFUNCION().getText();;
}
}

因此,当我向程序提供输入时,解析器树将正确生成并打印所有树,但是访问者却不这样做,我不知道为什么它在此行中返回空值“ String result = nv.visit(tree);“。我不明白为什么在该行中它返回null,但是当我在Visitor类中打印值时(在此行中“ System.out.println(” Result 2:“ + ctx.NOMBRESFUNCION()。getText()); ”)为我显示正确的值。

任何帮助,我们都会感激的。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)