# 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

# choose between the java 1.0 parser, the 1.1 parser, or the 1.2 parser.
#  (for pre-1.2 lexer, also change boolean in Main/Main.java)
JAVA_GRAMMAR=java12.cup # java11.cup # java10.cup

all: Parse/Grm.class Lex/Lex.class Main/Main.class

# Feed the appropriate CUP specification to javaCUP.
Parse/Grm.java Parse/Sym.java: Parse/$(JAVA_GRAMMAR)
	cd Parse && \
	${JAVA} java_cup.Main ${CUPFLAGS} -parser Grm -symbols Sym \
		< $(JAVA_GRAMMAR) 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} Parse/*.java

# Make the lexer symbols from the parser symbols.
Lex/Sym.java: Parse/Sym.java
	sed -e "s/package Parse/package Lex/" < Parse/Sym.java > Lex/Sym.java

# Compile the java source for the 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/Grm.class Lex/Lex.class Main/Main.class phony
	${JAVA} Main.Main Parse/Lexer.java && \
	${JAVA} Main.Main Parse/Grm.java
# always run the test.
phony:

# clean up after ourselves.
clean:
	$(RM) Parse/Grm.java Parse/Sym.java Parse/Grm.err Lex/Sym.java \
              */*.class 

veryclean: clean
	$(RM) *~ */*~
