我正在尝试使用这样的标准测试装置来测试 ANTLR 语法
import org.antlr.runtime.*;
class Main {
public static void main(String[] args) throws Exception {
SampleLexer lexer = new SampleLexer(new ANTLRStringStream(args[0]));
SampleParser parser = new SampleParser(new CommonTokenStream(lexer));
parser.program();
}
}
我有一个名为 mytest00.txt 的测试文件。现在我想使用这个文件作为输入。我想我正在这里进行标准 IO 重定向。
bash-3.2$ java Main < mytest00
但是它给了我这样的错误消息。请问有什么问题吗?谢谢。
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at Main.main(SampleTest.java:5)
最佳答案
您正在尝试使用args[0]
,但您实际上并未传递任何命令行参数 - 您只是将文件重定向到进程的标准输入。因此该数组没有元素,并且您会收到异常,因为您试图获取该空数组的第一个元素。
目前还不清楚您是否实际上想要ANTLRStringStream
。我怀疑你想要 ANTLRInputStream
包装 System.in
if args.length == 0
和 ANTLRFileStream(args[0])
否则。
关于java Main < inputfile 不起作用(Main 是一个用于测试 ANTLR 语法的 java 类),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8019495/