0

我已经用 ANTLR4 生成并编译了一个语法。通过命令行我可以查看是否有错误,但是我在将此解析器成功集成到 java 程序中时遇到问题。我可以使用 ANTLR4 方法,因为我已经在 Eclipse 中将 JAR 添加到我的库中,但是我完全无法检索令牌文本或找出是否以任何有意义的方式生成错误。任何帮助,将不胜感激。如果我以任何方式模棱两可,请告诉我,我将深入研究更多细节。

查看以前的版本,可能是我想要的类似 compilerUnit() 的等效方法。

4

1 回答 1

1

像这样的东西应该可以工作(假设你从你的语法中生成)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));
    }
}

如果您不想从语法中预生成它们(或者您有动态语法),您也可以使用解析器和词法分析器解释器。

于 2013-12-31T20:23:15.963 回答