将ANTLR4集成到Java中
我已经用ANTLR4生成并编译了一个语法。通过命令行,我可以看到是否有错误,但是我在成功地将这个解析器集成到java程序中时遇到了问题。当我在Eclipse中将JAR添加到我的库中时,我能够使用ANTLR4方法,但是我完全无法检索令牌文本,也无法确定是否以任何有意义的方式生成了错误。任何帮助都将不胜感激。如果我有任何模棱两可的地方,请让我知道,我会深入了解更多细节将ANTLR4集成到Java中,java,antlr4,Java,Antlr4,我已经用ANTLR4生成并编译了一个语法。通过命令行,我可以看到是否有错误,但是我在成功地将这个解析器集成到java程序中时遇到了问题。当我在Eclipse中将JAR添加到我的库中时,我能够使用ANTLR4方法,但是我完全无法检索令牌文本,也无法确定是否以任何有意义的方式生成了错误。任何帮助都将不胜感激。如果我有任何模棱两可的地方,请让我知道,我会深入了解更多细节 看看以前的版本,我想要的可能是类似compileUnit()的等效方法。类似的方法应该可以工作(假设您根据语法生成了Generate
看看以前的版本,我想要的可能是类似compileUnit()的等效方法。类似的方法应该可以工作(假设您根据语法生成了
GeneratedLexer
和GeneratedParser
):
如果您不想从语法中预生成语法(或者您有一个动态语法),也可以使用语法语法语法语法语法语法语法语法语法语法语法语法语法语法语法语法语法语法语法语法语法语法语法语法语法语法语法语法语法语法。这不是最麻烦的任务,因为我的语法并不十分复杂。然而,在浪费了大约三个小时试图让antlr工作,并且像我一开始计划的那样自己做之后,我觉得自己很傻。
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));
}
}