Я не могу сгенерировать парсер CUP и сканер JFlex в cmd

Я новичок в компиляторе. Я прочитал, что я могу сгенерировать файл xxx.flex в cmd с помощью этого кода:

java JFlex.Main xxx.flex

но я получил эту ошибку:

Ошибка: не удалось найти или загрузить основной класс JFlex.Main

и для создания yyy.cup я набрал:

java_cup.Main yyy.cup

но я тоже получил эту ошибку:

Ошибка: не удалось найти или загрузить основной класс java_cup.Main

я запутался... что мне делать?

1 ответ

Когда вы вызываете

java JFlex.Main xxx.flex

Вы просите Java загрузить JFlex.Main класс и прохождение xxx.flex в качестве параметра. Как вы не говорите Java, где это JFlex.Main класс, java ищет его в своем пути к классам, и если вы не добавили JAR-файл JFlex в путь к классу, это приведет к сообщению об ошибке

Error: Could not find or load main class JFlex.Main

Кстати, имена классов и пространства имен чувствительны к регистру: в файле JAR JFlex Main класс находится в jflex каталог, а не JFlex так что вам нужно вызвать jflex.Main класс... если вы не используете версию JFlex до 1.5, где JFlex законно

Чтобы позволить Java найти класс:

  • либо изменить путь к системному классу (с переменной среды $CLASSPATH- или же %CLASSPATH% в окнах)
  • или просто укажите местоположение файла фляги java команда с -cp параметр

Например:

java -cp path/to/jflex-1.6.0.jar jflex.Main xxx.jflex 

Если банка находится в текущем каталоге, вы можете просто использовать

java -cp jflex-1.6.0.jar jflex.Main xxx.jflex 

Или, проще говоря, поскольку это исполняемый файл, вы можете опустить основной класс

java -jar jflex-1.6.0.jar xxx.jflex 

Точно так же кажется, что java отсутствует файл JAR CUP при обработке вашего yyy.cup файл, вы можете исправить это как для JFlex с

java -cp java-cup-11a.jar java_cup.Main yyy.cup

или же

java -jar java-cup-11a.jar java_cup.Main yyy.cup
Другие вопросы по тегам