# vi:set ts=8 sw=8 noet:

TARGET = ndlg
OBJS = parser_lexer.o parser_scanner.o main.o
GENERATED = parser_lexer.c parser_scanner.c parser_scanner.h

RM = rm -f
CC = gcc
LD = gcc
LEX = flex
YACC = bison -y

CPPFLAGS =
CFLAGS =
LDFLAGS = -lfl
LEXFLAGS =
YACCFLAGS =

LEXER_DEBUG=1
SCANNER_DEBUG=1

ifdef LEXER_DEBUG
LEXFLAGS = -d
CFLAGS += -DLEXER_DEBUG
endif
ifdef SCANNER_DEBUG
CFLAGS += -DSCANNER_DEBUG
endif

all: $(TARGET)

debug:
	$(MAKE) LEXER_DEBUG=1 SCANNER_DEBUG=1 $(TARGET)

clean:
	$(RM) $(TARGET) $(OBJS)

distclean: clean
	$(RM) $(GENERATED)

.PHONY: all debug clean distclean

$(TARGET): $(OBJS)
	$(LD) -o $(TARGET) $(OBJS) $(LDFLAGS)

parser_scanner.h parser_scanner.c: parser.y
	$(YACC) -d -o parser_scanner.c $<

parser_lexer.c: parser.l parser_scanner.h
	$(LEX) $(LEXFLAGS) -o $@ parser.l

