2016-04-20 15 views
2

Ich versuche, ein Beispiel von CUP zur Verfügung gestellt: Parsing directly to XML.JFlex mit CUP kompilieren Fehler

ich die 'Minijava Grammatik' in minijava.cup und den Scanner in eine xml.flex benannte Datei mit dem Namen Datei gespeichert. Ich habe JFlex ausgeführt, um Lexer.java aus der xml.flex-Datei zu erhalten. Danach erhielt ich Parser.java und sym.java nach dem Befehl auf dem CUP Beispiel angegeben ausgeführt wird:

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

Meine Auswahl wie folgt aussieht:

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 

Ich versuche zu kompilieren die Datei Lexer.java mit dem folgenden Befehl:

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

aber ich bekomme 47 Fehler in den Forma t "... kann kein Symbol finden ...". Die ersten geben an, dass die Klassen sym und minijava.Constants nicht gefunden werden können.

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));

Ich verstehe nicht, warum die sym.java Datei nicht sichtbar Lexer ist oder wo die minijava.Constants-Datei zu erhalten.

Antwort

1

Sie fehlen das aktuelle Verzeichnis (wo sich Ihre Quellen befinden) im Klassenpfad. Es ist nicht standardmäßig enthalten, aber wenn Sie . in die Umgebungsvariable %CLASSPATH% (oder $CLASSPATH für Unices) setzen.

Versuchen Sie, die Einstellung -cp zu ändern, um das aktuelle Verzeichnis . hinzuzufügen.

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

Wenn Sie auf einem GNU/Linux, OS X oder einem UNIX-ähnlichen System, wäre es

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

In gleicher Weise sein, das aktuelle Verzeichnis in dem -cp Parameter hinzuzufügen beim Laufen mit java Befehl.

+0

Das hat funktioniert, danke. Ich habe vorher etwas ähnliches versucht: "javac -cp. *; Java-cup-11b-runtime.jar Lexer.java", hat aber nicht funktioniert. Jetzt bekomme ich 15 Fehler, die mit den Minijava.Constants verwandt sind, werde ich versuchen zu finden, wo erwartet das Beispiel von mir, es zu bekommen. –

+0

'. *' Ist nicht dasselbe wie '.': Der erste sucht alle Dateien des aktuellen Verzeichnisses, was in meinem Sinne falsch ist, während' .' das aktuelle Verzeichnis zum Durchsuchen der Klassen hinzufügt. – Seki

+0

Ja, ich merkte, dass nachdem ich geantwortet hatte, mischte ich die beiden in meinem Kopf und lehrte jeder den anderen ... –