我已经用ANTLR4生成并编译了一个语法。通过命令行,我可以看到是否有错误,但是我在成功地将这个解析器集成到java程序中遇到了问题。我能够使用ANTLR4方法,因为我已经在Eclipse中将JAR添加到我的库中,但是我完全无法检索令牌文本,也无法以任何有意义的方式发现是否正在生成错误。任何帮助都会很感激。如果我有任何模棱两可的地方,请让我知道,我会深入研究更多细节。
看看以前的版本,一个类似于compilationUnit()的等效方法可能就是我想要的。
这样应该可以工作(假设您从语法中生成了GeneratedLexer
和GeneratedParser
):
import java.io.FileInputStream;
import java.io.InputStream;
import org.antlr.v4.runtime.ANTLRInputStream;
import org.antlr.v4.runtime.CommonTokenStream;
import org.antlr.v4.runtime.tree.ParseTree;
import test.GeneratedLexer;
import test.GeneratedParser;
public class Main {
public static void main(String[] args) throws Exception {
String inputFile = null;
if (args.length > 0) {
inputFile = args[0];
}
InputStream is = System.in;
if (inputFile != null) {
is = new FileInputStream(inputFile);
}
ANTLRInputStream input = new ANTLRInputStream(is);
GeneratedLexer lexer = new GeneratedLexer(input);
CommonTokenStream tokens = new CommonTokenStream(lexer);
GeneratedParser parser = new GeneratedParser(tokens);
ParseTree tree = parser.startRule();
// Do something useful with the tree (e.g. use a visitor if you generated one)
System.out.println(tree.toStringTree(parser));
}
}
如果你不想从你的语法(或者你有一个动态语法)中预生成它们,你也可以使用解析器和词法分析器解释器。