简体   繁体   English

将ANTLR4集成到Java中

[英]Integrating ANTLR4 into Java

I have generated and compiled a grammar with ANTLR4. 我已经使用ANTLR4生成并编译了语法。 VIA the command line I am able to see if there is an error, but I am having issues integrating this parser into a java program successfully. 通过命令行,我可以查看是否存在错误,但是在将此解析器成功集成到Java程序中遇到问题。 I am able to use ANTLR4 methods as I've added the JAR's to my library in Eclipse, however I am completely unable to retrieve token text or find out if an error is being generated in any sort of meaningful manner. 在Eclipse中将JAR添加到我的库后,我能够使用ANTLR4方法,但是我完全无法检索令牌文本或确定是否以任何有意义的方式生成了错误。 Any help would be appreciated. 任何帮助,将不胜感激。 If I'm being ambiguous by any means, please let me know and I'll delve into more detail. 如果我有任何歧义,请让我知道,我将详细介绍。

Looking at previous versions, an equivalent method to something like compilationUnit() might be what I want. 在以前的版本中,我想要的是与compilationUnit()类似的等效方法。

Something like this should work (assuming you generated GeneratedLexer and GeneratedParser from your grammar): 这样的事情应该起作用(假设您从语法中生成了GeneratedLexerGeneratedParser ):

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

You could also use a parser and lexer interpreter if you don't want to pregenerate them from your grammar (or you have a dynamic grammar). 如果您不想从语法中预生成它们(或者您有动态语法),也可以使用解析器和词法分析器解释器

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM