ANTLR4外来输入

ANTLR4外来输入,antlr4,Antlr4,我的ANTLR4有问题。我试图从Python3代码中打印AST,但是有一些错误,我不知道如何修复它们 我编写了简单的测试代码: a=(1,2,3) print(a) 我运行了程序,但出现以下错误: line 1:1 extraneous input '=' expecting {<EOF>, '.', '*', '(', '**', '[', '|', '^', '&', '<<', '>>', '+', '-', '/', '%', '//', '

我的ANTLR4有问题。我试图从Python3代码中打印AST,但是有一些错误,我不知道如何修复它们

我编写了简单的测试代码:

a=(1,2,3)
print(a)
我运行了程序,但出现以下错误:

line 1:1 extraneous input '=' expecting {<EOF>, '.', '*', '(', '**', '[', '|', '^', '&', '<<', '>>', '+', '-', '/', '%', '//', '@'}
line 2:0 extraneous input '\n' expecting {<EOF>, '.', '*', '(', '**', '[', '|', '^', '&', '<<', '>>', '+', '-', '/', '%', '//', '@'}
line 3:0 extraneous input '\n' expecting {<EOF>, '.', '*', '(', '**', '[', '|', '^', '&', '<<', '>>', '+', '-', '/', '%', '//', '@'}
我从这个网站获得了语法:

解释 您的输入文件由两条语句组成,您正在解析该文件,就像它是一个表达式一样(使用Python 3语法中的行
ParseTree ParseTree=parser.expr();
;rule
expr

这也解释了第一个错误:标识符
a
被接受为表达式的一部分,但
=
符号不被接受。这是因为
=
是赋值语句的一部分

解决方案
使用另一个语法规则解析输入,例如
file\u input
规则,该规则将接受许多语句。将上述行更改为
ParseTree ParseTree=parser.file_input()

谢谢,它正在工作!我试图翻译AST,但我所有的想法都错了。我还没有在ANTLR的书中找到答案。你能帮我解决这个问题吗?@Daloteon你翻译AST是什么意思?翻译成什么?我想把Python代码翻译成Java代码。我有AST,我不知道下一步是什么。我试图用这棵树来生成代码,但它不起作用。@Daloteon看看这个。也许对你有帮助。对不起,我久违了。它在工作!:)但我还有一个问题。我不知道必须重写Python3BaseListener中的哪个方法才能将print()转换为System.out.println(),以及如何将“:”转换为“{”。链接到文件:
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.tree.*;
import org.antlr.v4.*;
public class Main {

    public static void main(String[] args) {
        try {
            ANTLRInputStream input = new ANTLRFileStream("/home/grzegorz/Desktop/Python3/input.txt");
            Python3Lexer lexer = new Python3Lexer(input);
            CommonTokenStream token = new CommonTokenStream(lexer);
            Python3Parser parser = new Python3Parser(token);
            ParseTree parseTree = parser.expr();
            System.out.println(parseTree.toStringTree(parser));

        }catch (Exception ex){
            ex.printStackTrace();
        }

    }
}