带有CUP的JFlex编译错误

时间:2016-04-20 00:15:24

标签: java jflex cup

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

我存储了Minijava Grammar'在名为 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

我的目录如下所示:

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 {

     

^ symbol:class sym

     

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

     

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

     

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

     

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

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

1 个答案:

答案 0 :(得分:1)

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

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