带有 CUP 编译错误的 JFlex

JFlex with CUP compile errors

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

我将 'Minijava Grammar' 存储在名为 minijava.cup 的文件中,将扫描仪存储在名为 xml.flex[ 的文件中=32=]。我 运行 JFlex 从 xml.flex 文件中获取 Lexer.java。之后,我在 运行ning 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: 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));

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

您缺少类路径中的当前目录(您的源代码所在的位置)。默认情况下不包含它,但是如果您将 . 放入 %CLASSPATH%(或 $CLASSPATH for 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

同理,在运行java命令的-cp参数中加入当前目录。