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.
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?