2016-04-20 4 views
2

CUPによって提供された例:Parsing directly to XMLを実行しようとしています。CUPコンパイルエラーのあるJFlex

私はminijava.cupとxml.flexという名前のファイルにスキャナという名前のファイルに「Minijava文法」を保存。私はJFlexを実行してxml.flexファイルからLexer.javaを取得しました。その後私は、CUPの例で指定されたコマンドを実行した後Parser.javasym.javaを得た:私は、コンパイルしようとしています

input.xml 
java-cup-11b.jar 
java-cup-11b-runtime.jar 
jflex-1.6.1.jar 
Lexer.java 
minyjava.cup 
Parser.java 
sym.java 
xml.flex 

java -jar java-cup-11b.jar -locations -interface -parser Parser -xmlactions minijava.cup 

私のディレクトリは次のようになります次のコマンドを使用してLexer.javaファイルを作成します。

しかし、私はformaで47のエラーを受け取りますt ".. can not find symbol ..."と表示されます。最初のクラスは、sym symとminijava.Constantsクラスが見つからないことを指定しています。

Lexer.java:17: error: cannot find symbol

public class Lexer implements java_cup.runtime.Scanner, sym, minijava.Constants{

^ symbol: class sym

Lexer.java:17: error: package minijava does not exist

public class Lexer implements java_cup.runtime.Scanner, sym, minijava.Constants {

^ Lexer.java:679: error: cannot find symbol

{return symbolFactory.newSymbol("EOF", EOF, new Location(yyline+ 1,yycolumn+1,yychar), new Location(yyline+1,yycolumn+1,yychar+1));

なぜsym.javaファイルがLexerに表示されないのか、またはminijava.Constantsファイルを取得する場所がわかりません。

答えて

1

クラスパスに現在のディレクトリ(ソースがあるディレクトリ)がありません。これはデフォルトでは含まれていませんが、.を環境変数%CLASSPATH%(またはユニックスの場合は$CLASSPATH)に入れた場合は、デフォルトでは含まれません。

設定を現在のディレクトリ.を追加するように変更してください。

javac -cp .;java-cup-11b-runtime.jar Lexer.java 

あなたがGNU/Linuxでは、OS Xまたは任意のUNIXライクなシステム上にある場合、それは、同様に

javac -cp .:java-cup-11b-runtime.jar Lexer.java 

だろう実行しているとき-cpパラメータにカレントディレクトリを追加javaコマンドを使用します。

+0

それはうまくいきました、ありがとうございます。私はこれまで同様のことを試しました。 "javac -cp。*; java-cup-11b-runtime.jar Lexer.java"が動作しませんでした。 今、私はminijava.Constantsに関連する15のエラーを取得します。私は、そのサンプルがどこからそれを得ることを期待しているのかを探そうとします。 –

+0

'。*'は '.'と同じではありません。最初のものは現在のディレクトリのすべてのファイルを検索しますが、それは間違っていますが、' .'はクラスを検索するために現在のディレクトリを追加します。 – Seki

+0

ええ、あなたが答えた後、私は頭の中で2つを混ぜ合わせて、それぞれがもう1つを教えた... –

関連する問題