2016-04-20 6 views
2

Я пытаюсь запустить пример, предоставленный CUP: Parsing directly to XML.JFlex с ошибками компиляции CUP

Я хранил «Minijava Грамматика» в файле с именем minijava.cup и сканера в файл с именем xml.flex. Я запустил JFlex для получения Lexer.java из файла xml.flex. После этого я получил Parser.java и sym.java после выполнения указанной команды на примере CUP:

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

Мой каталог выглядит следующим образом:

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 

Я пытаюсь скомпилировать файл Lexer.java, используя следующую команду:

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

но я получаю 47 ошибок в формат «..connot find symbol ...». Первые указывают, что классы 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 для унифицированных).

Попробуйте изменить настройку -cp, чтобы добавить текущий каталог ..

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», но не работал. Теперь я получаю 15 ошибок, связанных с minijava.Constants, я попытаюсь найти, где этот пример ожидает от меня. –

+0

'. *' Не то же самое, что '.': первый будет искать все файлы текущего каталога, которые в моем понимании ошибочны, а' .' добавляет текущий каталог для поиска классов. – Seki

+0

Да, я понял, что после того, как вы ответили, я смешал двух в моей голове и научил каждого из них делать другой ... –