我正在尝试运行CUP提供的一个示例:直接解析到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。找不到常量。
java:17:错误:找不到符号
公共类Lexer实现java_cup.runtime.Scanner,sym,minijava。常数{
^符号:类符号
java:17:错误:包minijava不存在
公共类Lexer实现java_cup.runtime.Scanner,sym,minijava。常数{
^Lexer.java:679:错误:找不到符号
{return symbolFactory.newSymbol("EOF",EOF,新位置(yyline+1,yycolumn+1,yychar),新位置
我不明白为什么sym.java文件对Lexer不可见,也不明白在哪里可以获得minijava。常量文件。
类路径中缺少当前目录(源所在的目录)。默认情况下,它不包括在内,但如果将.
放入%CLASSPATH%
(对于unices,则为$CLASSPATH
)环境变量中。
尝试更改-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
参数中。