#YACC=yacc 
#VERBOSE=
# For debugging:
#YACC=bison -y
YACC=byacc
VERBOSE=

CCFLAGS=-O
LDFLAGS=

O1=spec.o parser.o scanner.o sactions.o type.o symmap.o list.o bucket.o error.o
#O1=spec.o parser.o scanner.o sactions.o type.o symmap.o list.o bucket.o
O2=misc1.o setexpr.o 
OBJ=$(O1) $(O2)

spec: $(OBJ)
	cc $(LDFLAGS) $(OBJ) -o spec

link:
	cc $(CCFLAGS) $(OBJ) -o spec

clean:
	rm spec parser.c parser.h y.output y.tab.c y.tab.h $(OBJ)

spec.o:
	cc $(CCFLAGS) -c spec.c

parser.o: parser.h sactions.h type.h misc1.h list.h
	cc $(CCFLAGS) -c parser.c

scanner.o: type.h misc1.h list.h parser.h symmap.h scantab.h
	cc $(CCFLAGS) -c scanner.c

type.o: type.h misc1.h list.h bucket.h symmap.h
	cc $(CCFLAGS) -c type.c

misc1.o: type.h misc1.h list.h bucket.h symmap.h
	cc $(CCFLAGS) -c misc1.c

symmap.o: symmap.h bucket.h
	cc $(CCFLAGS) -c symmap.c

sactions.o: sactions.h type.h misc1.h symmap.h
	cc $(CCFLAGS) -c sactions.c

list.o: list.h bucket.h
	cc $(CCFLAGS) -c list.c

setexpr.o: list.h symmap.h
	cc $(CCFLAGS) -c setexpr.c

bucket.o: bucket.h
	cc $(CCFLAGS) -c bucket.c

error.o:
	cc $(CCFLAGS) -c error.c

parser.h: parser.c

parser.c: parser.y
	$(YACC) -d$(VERBOSE) parser.y
	mv y.tab.h parser.h
	mv y.tab.c parser.c

# gripe: ypp does not work correctly.
#parser.y: spectop.y token.yh type.yh expr.yh stmt.yh
#	ypp < spectop.y > parser.y

