2

我正在尝试运行 CUP 提供的示例:Parsing directly to XML

我将“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。

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

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

^ 符号:类符号

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

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

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

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

我不明白为什么 Lexer 看不到 sym.java 文件或从哪里获取 minijava.Constants 文件。

4

1 回答 1

1

您在类路径中缺少当前目录(您的源代码所在的位置)。默认情况下不包含它,但如果您放入.%CLASSPATH%$CLASSPATH用于 unices)环境变量。

尝试更改-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

于 2016-04-20T07:17:54.517 回答