2016-04-17 9 views
2

Ich habe alle generierten Java-Dateien in einem einzigen Verzeichnis nach der Ausführung von ANTLR, also habe ich einige Optionen verwendet, um ein separates Verzeichnis und Namespace zu generieren, die gespeichert und kompiliert werden, um alle generierten Dateien zu speichern.Ausführen von ANTLR grun (TestRig) zur Grammatik in einem Paket.

Dies ist die Grammatikdatei:

Grammatik Expr;

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

ich konnte die generierten Dateien in einem anderen Verzeichnis erhalten mit o und Paketinformationen mit package Option hinzufügen.

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

Kompilieren des Codes erfordert d und sourcepath Option in javac.

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

Ich könnte überprüfen, der Code funktioniert von der ausführbaren Datei.

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

Ich könnte es bauen und ausführen.

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 

Dies ist die Verzeichnisstruktur.

enter image description here Nach der Überprüfung funktioniert alles gut, ich habe versucht, grun (TestRig) zu verwenden. Ich habe versucht grun Expr prog -tree und grun out/expr/Expr prog -tree, aber sie haben nicht funktioniert.

Wie läuft grun auf die ANTLR-Dateien in anderen Verzeichnissen?

Antwort

2

AFAIK, grun funktioniert nur, wenn alle Dateien im selben Ordner sind. Es ist als schnelles Debugging-Tool gedacht.