2013-04-06 82 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如果你不想從你的語法預生成他們(或者你有動態語法)。