1 # Makefile to create simple test framework for the java parsers.
2 # Copyright (C) 1998 C. Scott Ananian <cananian@alumni.princeton.edu>
3 # Released under the terms of the GPL with NO WARRANTY. See COPYING.
11 # list the available java grammar versions
12 JAVA_GRAMMARS=10 11 12 14 15
14 all: $(foreach j,$(JAVA_GRAMMARS),Parse/Grm$(j).class) \
15 Lex/Lex.class Main/Main.class
17 # Feed the appropriate CUP specification to javaCUP.
18 Parse/Grm%.java Parse/Sym%.java: Parse/java%.cup
20 ${JAVA} java_cup.Main ${CUPFLAGS} -parser Grm$* -symbols Sym$* \
21 < java$*.cup 2>Grm$*.err && tail Grm$*.err
23 # Compile the java source for the parser.
24 Parse/Grm%.class: Parse/Lexer.java Parse/Grm%.java Parse/Sym%.java
27 # Make the lexer symbols from the parser symbols.
28 Lex/Sym.java: $(foreach j,$(JAVA_GRAMMARS),Parse/Sym$(j).java)
29 # verify that these are all identical!
30 @if cat $^ | sed -e 's/Sym[0-9][0-9]/Sym/g' | sort | uniq -c | \
31 egrep -v '^[ ]*[0-9]*[05] ' | grep -v "^[ ]*[0-9]*[ ]*//"\
33 echo $^ "are not identical;" ;\
34 echo "we won't be able to build a single lexer for all of these." ;\
37 # now make a generic version.
38 sed -e "s/package Parse/package Lex/" -e "s/Sym10/Sym/g" \
39 < Parse/Sym10.java > $@
41 # Compile the java source for the (unified) lexer.
42 Lex/Lex.class: Lex/*.java Lex/Sym.java
43 ${JAVAC} ${JFLAGS} Lex/*.java
45 # Compile the java source for the driver.
46 Main/Main.class: Main/Main.java
47 ${JAVAC} ${JFLAGS} Main/*.java
49 # run some quick tests.
50 test: Parse/Lexer.java Parse/Grm14.java all phony
51 for n in 1 2 3 4 5; do \
52 ( ${JAVA} Main.Main Parse/Lexer.java $$n && \
53 ${JAVA} Main.Main Parse/Grm14.java $$n && \
54 ${JAVA} Main.Main tests/Escape.java) || exit 1; \
56 for n in 2 3 4 5; do \
57 ${JAVA} Main.Main tests/Eric.java $$n || exit 1; \
59 ${JAVA} Main.Main tests/TestJSR201.java 5
60 ${JAVA} Main.Main tests/Test15.java 5
61 ${JAVA} Main.Main tests/Eric15.java 5
62 # always run the test.
65 # target to make the distributed files.
67 -$(RM) -rf JavaGrammar javagrm.tar.gz javagrm.zip
68 cvs -d `cat CVS/Root` co -A -P JavaGrammar
69 find JavaGrammar -type d -name CVS | xargs $(RM) -rf
70 tar czvf javagrm.tar.gz JavaGrammar
71 zip -r javagrm.zip JavaGrammar
72 cp javagrm.tar.gz `date +javagrm-%d-%b-%Y.tar.gz`
73 cp README javagrm-README.txt
77 scp javagrm* shades.cs.princeton.edu:/u/appel/public_html/modern/java/CUP
79 # clean up after ourselves.
82 $(foreach j,$(JAVA_GRAMMARS),Parse/Grm$(j).err) \
83 $(foreach j,$(JAVA_GRAMMARS),Parse/Grm$(j).java) \
84 $(foreach j,$(JAVA_GRAMMARS),Parse/Sym$(j).java) \
85 Parse/parser.java Parse/sym.java \
89 $(RM) *~ */*~ javagrm*