ANTLR = java antlr.Tool

SRCS = Access.java \
And.java \
Arith.java \
Array.java \
Break.java \
Constant.java \
Do.java \
Else.java \
Expr.java \
Id.java \
If.java \
Logical.java \
Main.java \
Node.java \
Not.java \
Op.java \
Or.java \
Rel.java \
Seq.java \
Set.java \
SetElem.java \
Stmt.java \
SymbolTable.java \
Temp.java \
Type.java \
Unary.java \
While.java

GENERATED = MyLexer.java MyParser.java MyWalker.java MyLexerTokenTypes.java

TESTCASES = test-example1 test-example2 test-example3 \
   expr1 expr2 expr3 expr4 jump1 jump2 jump3 prog0 prog1 prog2 prog3 prog4

# Disable warnings that appear mostly in ANTLR-generated code
# DISABLED_WARNINGS = -warn:-unusedLocal,unusedImport

Main.class :  $(SRCS) $(GENERATED)
	javac $(DISABLED_WARNINGS) Main.java

check : Main.class
	@for basename in $(TESTCASES) ; do \
	echo -n $$basename"..."; \
	java Main $$basename.t > $$basename.out; \
	(diff -b -q $$basename.golden $$basename.out && echo "OK") \
	  || echo "FAILED"; \
	done

$(GENERATED) MyLexerTokenTypes.txt : grammar.g
	rm -f $(GENERATED)
	$(ANTLR) grammar.g

doc.dvi : doc.tex
	latex $< < /dev/null

doc.ps : doc.dvi
	dvips -K -Ppdf -R0 -t letter -o $@ $<

doc.pdf : doc.ps
	ps2pdf doc.ps

TARFILES =  Makefile grammar.g $(SRCS) $(GENERATED) \
            $(TESTCASES:=.t) $(TESTCASES:=.golden) doc.tex doc.pdf
dragonbook-language.tar.gz : $(TARFILES)
	tar zcf $@ $(TARFILES)

.PHONY : clean
clean :
	rm -f *.class $(GENERATED) MyLexerTokenTypes.txt *.out

