2016-04-17 19 views
2

在ANTLR執行後,我在一個目錄中生成了所有生成的java文件,因此我使用了一些選項來生成單獨的目錄和命名空間,以存儲和編譯以存儲所有生成的文件。在文件包中運行ANTLR grun(TestRig)。

這是語法文件:

語法Expr;

prog: (expr NEWLINE)* ; 
expr: expr ('*'|'/') expr 
    | expr ('+'|'-') expr 
    | INT 
    | '(' expr ')' 
    ; 
NEWLINE : [\r\n]+ ; 
INT  : [0-9]+ ; 

我能得到在不同的目錄中生成的文件與o,並與package選項添加包信息。

java -jar /usr/local/lib/antlr-4.5.3-complete.jar -listener -visitor -package expr -lib . -o gen/expr Expr.g4 

編譯代碼需要djavacsourcepath選項。

javac -cp .:/usr/local/lib/antlr-4.5.3-complete.jar -d out -sourcepath gen gen/expr/Expr*.java 

我可以從製作可執行文件檢查代碼的工作原理。

import expr.*; 
import org.antlr.v4.runtime.ANTLRInputStream; 
import org.antlr.v4.runtime.CommonTokenStream; 
import org.antlr.v4.runtime.tree.ParseTree; 

import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 

class ExprRunner { 
    public static void main(String[] args) throws Exception { 
     // create a CharStream that reads from standard input 

     String filePath = "input.txt"; 
     File fileInput = new File(filePath); 
     FileInputStream fileInputStream = new FileInputStream(fileInput); 


     ANTLRInputStream input = new ANTLRInputStream(fileInputStream); 
     ExprLexer lexer = new ExprLexer(input); 
     CommonTokenStream tokens = new CommonTokenStream(lexer); 
     ExprParser parser = new ExprParser(tokens); 
     ParseTree tree = parser.prog(); // begin parsing at init rule 
     System.out.println(tree.toStringTree(parser)); // print LISP-style tree   
    } 
} 

我可以構建並運行它。

javac -cp .:/usr/local/lib/antlr-4.5.3-complete.jar:out -d out -sourcepath . ExprRunner.java 
java -cp .:/usr/local/lib/antlr-4.5.3-complete.jar:out ExprRunner 

這是目錄結構。

enter image description here 檢查一切正常後,我試圖使用grun(TestRig)。我試過grun Expr prog -treegrun out/expr/Expr prog -tree,但他們沒有工作。

如何在位於其他目錄的ANTLR文件上運行grun

回答

2

AFAIK,grun只適用於所有文件都在同一個文件夾中。它意味着一個快速調試工具。