I am trying to run an example provided by CUP: Parsing directly to XML.
I stored the 'Minijava Grammar' in a file named minijava.cup and the scanner into a file named xml.flex. I ran JFlex to obtain Lexer.java from the xml.flex file. After that I obtained Parser.java and sym.java after running the command specified on the CUP example:
java -jar java-cup-11b.jar -locations -interface -parser Parser -xmlactions minijava.cup
My directory looks like this:
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
I am trying to compile the Lexer.java file by using the following command:
javac -cp java-cup-11b-runtime.jar Lexer.java
but I get 47 errrors in the format "..cannot find symbol...". The first ones specify that classes sym and minijava.Constants can't be found.
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));
I do not understand why the sym.java file is not visible to Lexer or where to get the minijava.Constants file.
You are missing the current directory (where your sources are) in the classpath. It is not included by default, but if you put .
in the %CLASSPATH%
(or $CLASSPATH
for unices) environment variable.
Try to change the -cp
setting to add the current directory .
.
javac -cp .;java-cup-11b-runtime.jar Lexer.java
If you are on a GNU/Linux, OS X or any UNIX-like system, it would be
javac -cp .:java-cup-11b-runtime.jar Lexer.java
In the same way, add the current directory to the -cp
parameter when running with java
command.