Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ANTLR测试类未编译?_Antlr - Fatal编程技术网

ANTLR测试类未编译?

ANTLR测试类未编译?,antlr,Antlr,我拼凑了一些代码来测试lexer/parser语法,但我一直在研究如何创建适当的文件输入/流对象来解析文件。我的代码如下所示,我得到了一个关于给BasicLexer类构造函数一个AntlInputStream而不是CharStream的错误,以及一个与给BasicParser一个CommonTokenStream类似的消息(它需要TokenStream)。你知道我哪里出错了吗 public static void main(String[] args) throws Exception {

我拼凑了一些代码来测试lexer/parser语法,但我一直在研究如何创建适当的文件输入/流对象来解析文件。我的代码如下所示,我得到了一个关于给BasicLexer类构造函数一个AntlInputStream而不是CharStream的错误,以及一个与给BasicParser一个CommonTokenStream类似的消息(它需要TokenStream)。你知道我哪里出错了吗

public static void main(String[] args) throws Exception {
    String filename = args[0];
    InputStream is;

    try {
        is = new FileInputStream(filename);

        //is.close();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    ANTLRInputStream in = new ANTLRInputStream(is);
    BasicLexer lexer = new BasicLexer(in);
    CommonTokenStream tokens = new CommonTokenStream(lexer);
    BasicParser parser = new BasicParser(tokens);
    parser.eval();
}

我认为您应该将代码向上移动到try块中-因为在对AntlInputStream构造函数的调用中有可能“is”无效。如果
FileInputStream
抛出异常,
AntlInputStream
将没有
is
的值。只需将所有内容从
antlInputStream
移动到
eval()
try
块。你们说得对。另外,我的AntlInputStream的明显类型是错误的,它必须是CharStream,我必须将parser.eval()更改为parser.expr()。