我的antlr4有问题。我正在尝试从Python 3代码中打印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>, '.', '*', '(', '**', '[', '|', '^', '&', '<<', '>>', '+', '-', '/', '%', '//', '@'}
我的主要课程:
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();
}
}
}
我有这个网站的语法:https://github.com/antlr/grammars-v4/tree/master/python3
说明
您的输入文件由两个语句组成,您正在解析文件,就好像是一个表达式(使用LINE ParseTree parseTree = parser.expr();
;从Python 3 Grammar中的规则expr
)。
这也是第一个错误:标识符a
被接受为表达式的一部分,但=
符号不是。那是因为=
是分配语句的一部分。
解决方案
使用另一个语法规则来解析输入,例如file_input
规则,该规则将接受许多语句。将上述线更改为ParseTree parseTree = parser.file_input();
。