PROJECT = functions
ADDITIONAL_OBJECTS = syntree.o function.o

CC = gcc
CXX = g++
CXXFLAGS = -ansi -Wall
YACC = bison
LEX = flex

.PHONY = clean

$(PROJECT) : $(PROJECT).tab.o lex.yy.o $(ADDITIONAL_OBJECTS)
	$(CXX) -o$(PROJECT) $(PROJECT).tab.o lex.yy.o $(ADDITIONAL_OBJECTS)

syntree.o : syntree.hpp syntree.cpp

function.o : function.hpp function.cpp

lex.yy.o : lex.yy.c $(PROJECT).tab.hpp
	$(CXX) $(CXXFLAGS) -c lex.yy.c

$(PROJECT).tab.o : $(PROJECT).tab.cpp
	$(CXX) $(CXXFLAGS) -c $(PROJECT).tab.cpp

lex.yy.c : $(PROJECT).l
	$(LEX) $(PROJECT).l

$(PROJECT).tab.cpp $(PROJECT).tab.h : $(PROJECT).ypp
	$(YACC) -d $(PROJECT).ypp

clean :
	-@rm  $(PROJECT) lex.yy.c $(PROJECT).tab.*
	-@rm *.o
