2013-04-06 87 views
0

我已经用ANTLR4生成并编译了一个语法。 VIA的命令行我能够看到是否有错误,但我遇到了问题将这个解析器成功地集成到一个Java程序中。我能够使用ANTLR4方法,因为我在Eclipse中将JAR添加到了我的库中,但是我完全无法检索令牌文本或找出是否以任何有意义的方式生成错误。任何帮助,将不胜感激。如果我以任何方式模棱两可,请让我知道,我会深入探讨更多细节。将ANTLR4集成到Java中

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

+0

您是否考虑过使用滚冷的? – fge 2013-04-06 20:32:45

+0

不幸的是,我最终只是从头开始编写解析器。这不是最麻烦的任务,因为我的语法并不复杂。然而,我浪费大约三个小时试图让antlr工作,并像我从一开始就计划的那样自己做这件事,我感到很傻。 – user1757359 2013-04-08 21:22:03

回答

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

你也可以使用一个parser and lexer interpreter如果你不想从你的语法预生成他们(或者你有动态语法)。