--- /dev/null
+# Makefile to create simple test framework for the java parsers.
+# Copyright (C) 1998 C. Scott Ananian <cananian@alumni.princeton.edu>
+# Released under the terms of the GPL with NO WARRANTY. See COPYING.
+
+# java environment.
+JAVA=java
+JAVAC=javac
+JFLAGS=-g
+#CUPFLAGS=-dump_states
+
+# list the available java grammar versions
+JAVA_GRAMMARS=10 11 12 14 15
+
+all: $(foreach j,$(JAVA_GRAMMARS),Parse/Grm$(j).class) \
+ Lex/Lex.class Main/Main.class
+
+# Feed the appropriate CUP specification to javaCUP.
+Parse/Grm%.java Parse/Sym%.java: Parse/java%.cup
+ cd Parse && \
+ ${JAVA} java_cup.Main ${CUPFLAGS} -parser Grm$* -symbols Sym$* \
+ < java$*.cup 2>Grm$*.err && tail Grm$*.err
+
+# Compile the java source for the parser.
+Parse/Grm%.class: Parse/Lexer.java Parse/Grm%.java Parse/Sym%.java
+ ${JAVAC} ${JFLAGS} $^
+
+# Make the lexer symbols from the parser symbols.
+Lex/Sym.java: $(foreach j,$(JAVA_GRAMMARS),Parse/Sym$(j).java)
+# verify that these are all identical!
+ @if cat $^ | sed -e 's/Sym[0-9][0-9]/Sym/g' | sort | uniq -c | \
+ egrep -v '^[ ]*[0-9]*[05] ' | grep -v "^[ ]*[0-9]*[ ]*//"\
+ ; then \
+ echo $^ "are not identical;" ;\
+ echo "we won't be able to build a single lexer for all of these." ;\
+ exit 1;\
+ fi
+# now make a generic version.
+ sed -e "s/package Parse/package Lex/" -e "s/Sym10/Sym/g" \
+ < Parse/Sym10.java > $@
+
+# Compile the java source for the (unified) lexer.
+Lex/Lex.class: Lex/*.java Lex/Sym.java
+ ${JAVAC} ${JFLAGS} Lex/*.java
+
+# Compile the java source for the driver.
+Main/Main.class: Main/Main.java
+ ${JAVAC} ${JFLAGS} Main/*.java
+
+# run some quick tests.
+test: Parse/Lexer.java Parse/Grm14.java all phony
+ for n in 1 2 3 4 5; do \
+ ( ${JAVA} Main.Main Parse/Lexer.java $$n && \
+ ${JAVA} Main.Main Parse/Grm14.java $$n && \
+ ${JAVA} Main.Main tests/Escape.java) || exit 1; \
+ done
+ for n in 2 3 4 5; do \
+ ${JAVA} Main.Main tests/Eric.java $$n || exit 1; \
+ done
+ ${JAVA} Main.Main tests/TestJSR201.java 5
+ ${JAVA} Main.Main tests/Test15.java 5
+ ${JAVA} Main.Main tests/Eric15.java 5
+# always run the test.
+phony:
+
+# target to make the distributed files.
+dist:
+ -$(RM) -rf JavaGrammar javagrm.tar.gz javagrm.zip
+ cvs -d `cat CVS/Root` co -A -P JavaGrammar
+ find JavaGrammar -type d -name CVS | xargs $(RM) -rf
+ tar czvf javagrm.tar.gz JavaGrammar
+ zip -r javagrm.zip JavaGrammar
+ cp javagrm.tar.gz `date +javagrm-%d-%b-%Y.tar.gz`
+ cp README javagrm-README.txt
+ $(RM) -rf JavaGrammar
+upload: dist
+ chmod a+r javagrm*
+ scp javagrm* shades.cs.princeton.edu:/u/appel/public_html/modern/java/CUP
+
+# clean up after ourselves.
+clean:
+ $(RM) Lex/Sym.java \
+ $(foreach j,$(JAVA_GRAMMARS),Parse/Grm$(j).err) \
+ $(foreach j,$(JAVA_GRAMMARS),Parse/Grm$(j).java) \
+ $(foreach j,$(JAVA_GRAMMARS),Parse/Sym$(j).java) \
+ Parse/parser.java Parse/sym.java \
+ */*.class
+
+veryclean: clean
+ $(RM) *~ */*~ javagrm*