OCAMLC=ocamlc
OCAMLYACC=ocamlyacc
OCAMLLEX=ocamllex
OCAMLCFLAGS=
TARGET=calc

OBJS=syntax.cmo parser.cmo lexer.cmo pretty.cmo main.cmo

all: lexer.ml parser.cmi $(TARGET)

$(TARGET): $(OBJS)
	$(OCAMLC) $(OCAMLCFLAGS) -o $@ $^

lexer.ml: lexer.mll
	$(OCAMLLEX) $^

parser.mli parser.ml: parser.mly
	$(OCAMLYACC) $^

parser.cmi: syntax.ml parser.mli
	$(OCAMLC) $(OCAMLFLAGS) -c $^

%.cmo: %.ml
	$(OCAMLC) $(OCAMLFLAGS) -c $<

# %.cmi: %.mli
#	$(OCAMLC) $(OCAMLFLAGS) -c $<

clean:
	rm -f $(TARGET)
	rm -f *.cm[iox] *.o *~ parser.ml parser.mli parser.output lexer.ml
