Antlr如何将visit的return值传递到主函数呢? 10C

我按照 antlr 教程编写了一个 antlr 的 .g4 文件,是实现简单的计算器算式匹配功能,然后编写了java程序进行测试,测试计算结果

编写的 .g4 文件如下

grammar LabeledExpr;
prog: stat+; 
//语句
stat: expr NEWLINE    #printExpr //语句可以是表达式+换行符
| expr                #printExpr2 //可以是表达式
| ID '=' expr NEWLINE #assign //可以是声明变量的语句
| NEWLINE             #blank //也可以是空行
;
//表达式
expr: expr op=('*'|'/') expr #MulDiv //可以表达式乘或除表达式
| expr op=('+'|'-') expr    #AddSub //可以表达式加或减表达式
| INT                       #int //可以是数字
| ID                        #id //可以是标识符
| '(' expr ')'              #parens //也可以是括号表达式
;
//词法规则
ID : [a-zA-Z]+ ; //match identifiers 匹配标识符
INT : [0-9]+ ; //match integers 匹配数字
NEWLINE:'\r'? '\n'; //return newline(end-statement signal)
WS : [ \t]+ -> skip ; //跳过空格与tab
MUL : '*' ;
DIV : '/' ;
ADD : '+' ;
SUB : '-' ;

然后用java进行计算测试的主函数如下:

public class MainClass {
    public static void main(String[] args) throws Exception {
        CharStream input = CharStreams.fromString("(2+3) *5\n");

        LabeledExprLexer lexer = new LabeledExprLexer(input);
        CommonTokenStream tokens = new CommonTokenStream(lexer);
        LabeledExprParser parser = new LabeledExprParser(tokens);
        ParseTree tree = parser.prog(); 

        EvalVisitor eval = new EvalVisitor();
        eval.visit(tree);
                int value = ; //打算将visit中的计算结果传递到这里
    }
}

编写的 visit 的一部分大致如下:

public Integer visitPrintExpr(LabeledExprParser.PrintExprContext ctx) {
        //遇到表达式+换行,计算通过expr()计算表达式的值,然后打印出来
        Integer value = visit(ctx.expr());
        System.out.println(value); //打印计算结果
        return value; //打算将此value传递给主函数
}

就是想请问一下 visit 中的 return 值如何传递到主函数呢?

weixin_42133456
weixin_42133456 有大佬帮忙解决一下吗?
一年多之前 回复

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问