EXECUTABLE = parse
CC = gcc
CFLAGS = -std=c99
CFLAGS += -g
CFLAGS += -Werror
CFLAGS += -Wextra
CFLAGS += -Wall
CFLAGS += -Wmissing-declarations
CFLAGS += -pedantic

testfile = testGenCode

all: $(EXECUTABLE)

$(EXECUTABLE): lex.o parse.o dArr.o stack.o memory.o symtable.o genCode.o synth.o

symtable-output: symtable
	./symtable > symtable.output

symtable: symtable.o memory.o

lex-output: lex-test
	./lex-test < $(testfile).php > lex-$(testfile).output
	diff lex-$(testfile).reference lex-$(testfile).output

lex-reference: lex-test
	./lex-test < $(testfile).php > lex-$(testfile).reference

lex-test: lex-test.o lex.o dArr.o memory.o

parse-output: parse
	./parse < $(testfile).php > parse-$(testfile).output
	diff parse-$(testfile).reference parse-$(testfile).output

parse-reference: parse
	./parse < $(testfile).php > parse-$(testfile).reference

parse: parse.o lex.o dArr.o stack.o memory.o genCode.o symtable.o synth.o

gen-code: parse	
	./parse < $(testfile).php > $(testfile).ifjcode

clean:
	rm -f $(EXECUTABLE) lex-test parse symtable gen *.o *.out *.output
