CC = gcc -std=c11 -pedantic -Wall -g -lm

p1: p1.c
	@rm -f p1
	$(CC) -o p1 p1.c

p2: p2.c
	@rm -f p2
	$(CC) -o p2 p2.c

p3: p3.c
	@rm -f p3
	$(CC) -o p3 p3.c

p4: p4.c
	@rm -f p4
	$(CC) -o p4 p4.c

p1.class: p1.java
	@rm -f p1.class
	javac p1.java

p2.class: p2.java
	@rm -f p2.class
	javac p2.java

p3.class: p3.java
	@rm -f p3.class
	javac p3.java

p4.class: p4.java
	@rm -f p4.class
	javac p4.java

OBJS = scan.o parse.o # comment out parse.o for standalone scan.l

$(OBJS): Makefile parse.h # comment out parse.h for standalone scan.l

LIBS = # -lfl # uncomment for standalone scan.l

parse: $(OBJS)
	@rm -f parse
	$(CC) -o parse $(OBJS) $(LIBS)

parse.c parse.h: parse.y Makefile
	bison -v -d -o parse.c parse.y  # -t to enable debug

scan.c: scan.l Makefile
	flex -t scan.l >scan.c	# -d to enable debug

TMPS = scan.c parse.c parse.h parse.output

clean:
	rm -f a.out core p1 p2 p3 p4 p1.class p2.class p3.class p4.class $(OBJS) $(TMPS) parse