parser: lexer.o parser.o skup.o types.o symbols.o syn_tree.o
	g++ lexer.o parser.o skup.o types.o symbols.o syn_tree.o -o parser

syn_tree.o: syn_tree.cpp syn_tree.hpp
	g++ -c syn_tree.cpp -o syn_tree.o

symbols.o: symbols.cpp symbols.hpp
	g++ -c symbols.cpp -o symbols.o

types.o: types.cpp types.hpp
	g++ -c types.cpp -o types.o

skup.o: skup.cpp skup.hpp
	g++ -c skup.cpp -o skup.o

parser.o: parser.tab.cpp parser.tab.hpp
	g++ -c parser.tab.cpp -o parser.o

lexer.o: lex.yy.c
	g++ -c lex.yy.c -o lexer.o

lex.yy.c: lexer.l parser.tab.hpp
	flex -l lexer.l

parser.tabp.cpp parser.tab.hpp: parser.ypp
	bison -d -v parser.ypp

.PHONY: clean

clean:
	rm parser *.o *.yy.* *.tab.* *.output