ANTLR4如何设置sourceName?
我使用ANTLR4创建了一个解析器,它可以很好地处理文件。 现在,当我尝试直接从URL解析时,令牌的getSourceName()方法返回“unknown”。这是错误消息中的一个问题,我希望尽可能清楚 因此,我希望将从中检索输入的URL作为源名称,但我不知道在哪里可以设置该值。这就是我的代码的样子:ANTLR4如何设置sourceName?,antlr,Antlr,我使用ANTLR4创建了一个解析器,它可以很好地处理文件。 现在,当我尝试直接从URL解析时,令牌的getSourceName()方法返回“unknown”。这是错误消息中的一个问题,我希望尽可能清楚 因此,我希望将从中检索输入的URL作为源名称,但我不知道在哪里可以设置该值。这就是我的代码的样子: private parseDocument(URL u) { URLConnection conn = u.openConnection(); CharStream charStre
private parseDocument(URL u) {
URLConnection conn = u.openConnection();
CharStream charStream = CharStreams.fromStream(conn.getInputStream());
MyLexer lexer = new MyLexer(charStream);
CommonTokenStream tokenstream = new CommonTokenStream(lexer);
MyParser parser = new MyParser(tokenstream);
MyParser.ParseContext pc = parser.parse();
...
}
是否有类似setSourceName(String)方法的东西,无论是在CharStream还是lexer上?或者提供此信息的预期方式是什么?如果您查看:
public static CharStream fromStream(InputStream is)抛出IOException{
从流返回(is,StandardCharsets.UTF_8);
}
publicstaticcharstreamfromstream(InputStream是,Charset Charset)抛出IOException{
从流返回(is,字符集,-1);
}
公共静态CharStream fromStream(InputStream为,Charset Charset,long inputSize)引发IOException{
try(ReadableByteChannel通道=通道。新通道(is)){
从频道返回(
频道
charset,
默认缓冲区大小,
编码错误操作。替换,
IntStream.UNKNOWN\u源\u名称,
输入大小);
}
}
...
公共静态代码点Charstream fromChannel(
可通过Techannel频道读取,
字符集字符集,
int缓冲区大小,
编码错误动作解码错误动作,
字符串sourceName,
长inputSize)引发IOException
{
...
}
您可以看到,所有fromStream(…)
调用最终都会成为fromschannel(…)
调用,它是public
,因此可以像这样使用(尽管未经测试):
URL u=。。。
URLConnection conn=u.openConnection();
ReadableByTechChannel=Channels.newChannel(conn.getInputStream());
CharStream CharStream=CharStreams.fromChannel(
频道
StandardCharsets.UTF_8,
4096,
编码错误操作。替换,
u、 getPath(),
-1);