像這樣的東西應該工作(假設你從你的語法生成GeneratedLexer
和GeneratedParser
):
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如果你不想從你的語法預生成他們(或者你有動態語法)。
您是否考慮過使用滾冷的? – fge 2013-04-06 20:32:45
不幸的是,我最終只是從頭開始編寫解析器。這不是最麻煩的任務,因爲我的語法並不複雜。然而,我浪費大約三個小時試圖讓antlr工作,並像我從一開始就計劃的那樣自己做這件事,我感到很傻。 – user1757359 2013-04-08 21:22:03