我正在尝试运行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文件。
答案 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
参数。