Java 带有CUP编译错误的JFlex

Java 带有CUP编译错误的JFlex,java,jflex,cup,Java,Jflex,Cup,我正在尝试运行CUP提供的示例: 我将“Minijava语法”存储在名为Minijava.cup的文件中,并将扫描仪存储在名为xml.flex的文件中。我运行JFlex从xml.flex文件中获取Lexer.java。之后,在运行CUP示例中指定的命令后,我获得了Parser.java和sym.java: java -jar java-cup-11b.jar -locations -interface -parser Parser -xmlactions minijava.cup 我的目录如下

我正在尝试运行CUP提供的示例:

我将“Minijava语法”存储在名为Minijava.cup的文件中,并将扫描仪存储在名为xml.flex的文件中。我运行JFlex从xml.flex文件中获取Lexer.java。之后,在运行CUP示例中指定的命令后,我获得了Parser.javasym.java

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个错误。第一个指定找不到类sym和minijava.Constants

java:17:错误:找不到符号

公共类Lexer实现java_cup.runtime.Scanner、sym、minijava.Constants{

^符号:类别sym

java:17:错误:包minijava不存在

公共类Lexer实现java_cup.runtime.Scanner、sym、minijava.Constants{

^java:679:错误:找不到符号

{return symbolFactory.newSymbol(“EOF”,EOF,新位置(yyline+1,yycolumn+1,yychar),新位置(yyline+1,yycolumn+1,yychar+1))


我不明白为什么sym.java文件对Lexer不可见,或者从哪里获取minijava.Constants文件。

您在类路径中缺少当前目录(您的源所在)。默认情况下,它不包括在内,但如果您将
放在
%classpath%
中(或
$classpath
用于unices)环境变量

尝试更改
-cp
设置以添加当前目录

javac -cp .;java-cup-11b-runtime.jar Lexer.java
如果您使用的是GNU/Linux、OSX或任何类似UNIX的系统,那么

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

同样,在使用
java
命令运行时,将当前目录添加到
-cp
参数。

这很有效,谢谢。我以前也尝试过类似的方法:“javac-cp.*;java-cup-11b-runtime.jar Lexer.java”,但不起作用。现在我得到了15个与minijava.Constants相关的错误,我将尝试查找该示例希望我从何处获得它。
*
不同:第一个将搜索当前目录中的所有文件,在我看来,这些文件是错误的,
将当前目录添加到se是的,我意识到在你回答之后,我在脑海里把这两种方法混合在一起,并教他们各自做另一种……实际上,我犯了一个错误:
*
不会搜索当前目录的所有文件,而是搜索当前目录的所有隐藏文件(在unix世界中),我不确定Windows:它似乎在查找
但我没有测试效果。