Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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
ANTLR4如何设置sourceName?_Antlr - Fatal编程技术网

ANTLR4如何设置sourceName?

ANTLR4如何设置sourceName?,antlr,Antlr,我使用ANTLR4创建了一个解析器,它可以很好地处理文件。 现在,当我尝试直接从URL解析时,令牌的getSourceName()方法返回“unknown”。这是错误消息中的一个问题,我希望尽可能清楚 因此,我希望将从中检索输入的URL作为源名称,但我不知道在哪里可以设置该值。这就是我的代码的样子: private parseDocument(URL u) { URLConnection conn = u.openConnection(); CharStream charStre

我使用ANTLR4创建了一个解析器,它可以很好地处理文件。 现在,当我尝试直接从URL解析时,令牌的getSourceName()方法返回“unknown”。这是错误消息中的一个问题,我希望尽可能清楚

因此,我希望将从中检索输入的URL作为源名称,但我不知道在哪里可以设置该值。这就是我的代码的样子:

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);