ANTLR4无关输入

时间:2016-11-27 11:46:09

标签: antlr4

我的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

1 个答案:

答案 0 :(得分:0)

说明

您的输入文件包含两个语句,您正在解析该文件,就好像它是一个表达式(使用行ParseTree parseTree = parser.expr();;来自Python 3语法的规则expr

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

解决方案

使用另一个语法规则解析输入,例如file_input规则,它将接受许多语句。将上述行更改为ParseTree parseTree = parser.file_input();