2016-04-17 7 views
2

ANTLRを実行した後に、生成されたすべてのJavaファイルが1つのディレクトリに格納されているため、生成されたすべてのファイルを格納するために別のディレクトリと名前空間を生成し、パッケージ内の文法で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 

javacdsourcepathオプションが必要です。

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は、すべてのファイルが同じフォルダにある場合にのみ機能します。クイックデバッグツールとしての意味です。

関連する問題