0
これは最小化されたテストケースです。コンパイルする必要があります。コメントアウトされた文字列は4.6バージョンであり、コンパイルして動作します。だから私のビルド環境は正しいようです。ANTLR 4.7 CharStreams.fromFileNameが見つかりません
import java.lang.*;
import java.util.*;
import java.io.*;
class xx {
public static void main(String[] args) {
try {
// org.antlr.v4.runtime.ANTLRInputStream input = new
// org.antlr.v4.runtime.ANTLRFileStream("file name here"); // compiles
org.antlr.v4.runtime.CharStream input = new
org.antlr.v4.runtime.CharStreams.fromFileName("file name here");
} catch (Exception e) {
e.printStackTrace();
}
}
}
$ javac xx.java
xx.java:8: error: cannot find symbol
org.antlr.v4.runtime.CharStream input = new org.antlr.v4.runtime.CharStreams.fromFileName("file name here");
^
symbol: class fromFileName
location: class CharStreams
1 error
私はANTLR 4.6から4.7にアップグレードしています。変更の1つは、ANTLRInputStreamおよびANTLRFileStreamの非推奨です。 (参考ストレートから優秀かつ決定的ANTLR 4を撮影したもの)されたものをそう:
import org.antlr.v4.runtime.*; // http://www.antlr.org/
import org.antlr.v4.runtime.tree.*;
String f ...
ANTLRInputStream input = new ANTLRFileStream(f);
は今のようなものです:
CharStream input = new CharStreams.fromFileName(f);
私は/は/ usr/local/libに4.7をインストールしました私は文法を変更せずにコンパイルします。私は結果のJavaをコンパイルするときしかし、私は得る:
java -jar /usr/local/lib/antlr-4.7-complete.jar xx.g4
javac -Xlint:deprecation *.java
xxasm.java:61: error: cannot find symbol
CharStream input = new CharStreams.fromFileName(f);
^
symbol: class fromFileName
location: class CharStreams
1 error
私のクラスパスおよびJavaのバージョンは以下のとおりです。
CLASSPATH=.:/usr/local/lib/antlr-4.7-complete.jar:/usr/local/lib/jopt-simple-5.0.3.jar:/usr/local/lib/junit-4.12-sources.jar:/usr/local/lib/gson-2.8.1.jar
javac -version
javac 1.8.0_131
OSX 10.12.5
任意のアイデア? javapでANTLR-4.7-complete.jarを見たときにすべてが正常に見える:
-verboseフラグをオンにする...
public static org.antlr.v4.runtime.CharStream fromFileName(java.lang.String) throws java.io.IOException;
:
...
[loading ZipFileIndexFileObject[/usr/local/lib/antlr-4.7-complete.jar(org/antlr/v4/runtime/CharStreams.class)]]
dwasm.java:61: error: cannot find symbol
CharStream input = new CharStreams.fromFileName(f);
^
symbol: class fromFileName
location: class CharStreams
また、動作しません:
CharStream input = new org.antlr.v4.runtime.CharStreams.fromFileName(f);
org.antlr.v4.runtime.CharStream input = new
org.antlr.v4.runtime.CharStreams.fromFileName("file name goes here");
od -c
0004720 t i m e . C h a r S t r e a m s
0004740 . f r o m F i l e N a m e ( " f
0004760 i l e n a m e h e r e " ) ;
ありがとうございました!私はそれが私が見ていない単純なものでなければならないことを知っていました。もう一度、ありがとう。 – Olsonist