将 ANTLRInputStream 转换为 CharStream
Converting ANTLRInputStream to CharStream
我有一个基于 antlr4 的项目,其 Main class 包含以下代码:
package com.progur.langtutorial;
import java.io.FileInputStream;
import java.io.IOException;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.CharStreams;
import org.antlr.v4.runtime.CommonTokenStream;
public class Main {
@SuppressWarnings("deprecation")
public static void main(String[] args) {
try {
ANTLRInputStream input = new ANTLRInputStream(
new FileInputStream(args[0]));
GYOOLexer lexer = new GYOOLexer(input);
GYOOParser parser = new GYOOParser(new CommonTokenStream(lexer));
parser.addParseListener(new MyListener());
// Start parsing
parser.program();
} catch (IOException e) {
e.printStackTrace();
}
}
}
但是,由于不推荐使用 ANTLRInputStream,我需要改用 CharStream。
但是,当我尝试使用 CharStream 时,我无法移动
CharStream input = new ANTLRInputStream(
new FileInputStream(args[0]));
这是因为我不知道如何替换'='符号之后的语句部分。我尝试了 CharStreams.fromFileName(new FileInputStream(args[0]));
,但随后 eclipse 指出了这个错误 "CharStreams.fromFileName cannot be resolved to a type"。我也试过 CharStreams.fromFileName(args[0]);
结果相同。
我什至尝试了 CharStream input = new CharStreams.fromFileName("test");
,其中 "test" 是为测试我编写的语言解析器而编写的程序。也是一样。
我在 parser.addParseListener(new MyListener());
中也遇到另一个错误,其中显示 MyListener cannot be resolved to a type
。那是什么意思?在我查看的每个教程中,'MyListener()' 所在的位置都有一个随机名称。
正确的说法应该是什么?
谢谢!
像这样:
CharStream charStream = CharStreams.fromString("test");
其中 "test"
是要解析的输入本身。
或者当输入在文件中时,执行此操作:
CharStream charStream = CharStreams.fromFileName("/path/to/file.ext");
如果这不起作用,您需要检查抛出的异常(很可能该文件不在 ANTLR 查找它的位置:尝试绝对路径)。
我有一个基于 antlr4 的项目,其 Main class 包含以下代码:
package com.progur.langtutorial;
import java.io.FileInputStream;
import java.io.IOException;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.CharStreams;
import org.antlr.v4.runtime.CommonTokenStream;
public class Main {
@SuppressWarnings("deprecation")
public static void main(String[] args) {
try {
ANTLRInputStream input = new ANTLRInputStream(
new FileInputStream(args[0]));
GYOOLexer lexer = new GYOOLexer(input);
GYOOParser parser = new GYOOParser(new CommonTokenStream(lexer));
parser.addParseListener(new MyListener());
// Start parsing
parser.program();
} catch (IOException e) {
e.printStackTrace();
}
}
}
但是,由于不推荐使用 ANTLRInputStream,我需要改用 CharStream。 但是,当我尝试使用 CharStream 时,我无法移动
CharStream input = new ANTLRInputStream(
new FileInputStream(args[0]));
这是因为我不知道如何替换'='符号之后的语句部分。我尝试了 CharStreams.fromFileName(new FileInputStream(args[0]));
,但随后 eclipse 指出了这个错误 "CharStreams.fromFileName cannot be resolved to a type"。我也试过 CharStreams.fromFileName(args[0]);
结果相同。
我什至尝试了 CharStream input = new CharStreams.fromFileName("test");
,其中 "test" 是为测试我编写的语言解析器而编写的程序。也是一样。
我在 parser.addParseListener(new MyListener());
中也遇到另一个错误,其中显示 MyListener cannot be resolved to a type
。那是什么意思?在我查看的每个教程中,'MyListener()' 所在的位置都有一个随机名称。
正确的说法应该是什么?
谢谢!
像这样:
CharStream charStream = CharStreams.fromString("test");
其中 "test"
是要解析的输入本身。
或者当输入在文件中时,执行此操作:
CharStream charStream = CharStreams.fromFileName("/path/to/file.ext");
如果这不起作用,您需要检查抛出的异常(很可能该文件不在 ANTLR 查找它的位置:尝试绝对路径)。