#LEX=lex
LEX=flex
LFLAGS=
#YACC=yacc
YFLAGS=-d
YACC=bison
YFLAGS=-v -d -b y
CC=c++
CFLAGS=
CINCLUDES=
CLIBS=
MAKE=make
RM=/bin/rm
OBJS=y.tab.o lex.yy.o

defaul:
	make byte_code
	${MAKE} jcode
	make progs

nasm_code:
	yacc -d qp.y
	lex qp.l
	c++ lex.yy.c -c
	c++ y.tab.c -c
	c++ y.tab.o lex.yy.o -o qpc
	c89 io.c -c
	make start


byte_code:
	yacc -d qp.y
	lex qp.l
	c++ lex.yy.c -c
	c++ y.tab.c -c
	c++ y.tab.o lex.yy.o -o qpc

all:
	${MAKE} clean
	${MAKE} default
	${MAKE} jcode

jcode:
	javac -O libqp.java

asm:asm.java
	javac -O -classpath .:./bcel-5.2.jar asm.java

qpc: ${OBJS}
	${CC} ${CFLAGS} ${CINCLUDES} ${CLIBS} ${OBJS} -o qpc

clean:
	${RM} -f ./qpc io.o y.tab.o y.tab.c lex.yy.c lex.yy.o

y.tab.c: 
	${YACC} ${YFLAGS} pascal.y

scanner.o:
	${CC} ${CFLAGS} ${CINCLUDES} ${CLIBS} scanner.c -c

lex.yy.c:
	${LEX} ${LFLAGS} pascal.l

y.tab.o: y.tab.o
	${CC} ${CFLAGS} ${CINCLUDES} ${CLIBS} y.tab.c -c

lex.yy.o: lex.yy.c
	${CC} ${CFLAGS} ${CINCLUDES} ${CLIBS} lex.yy.c -c

start:
	nasm -f elf _start.asm -o _start.o
	nasm -f elf __main.asm -o __main.o

nasm_run:
	./p1
	./p2
	./p3

test:
	java p1
	java p2
	java p3

progs:
	./qpc p1.qp p1.asm
	java -classpath .:./bcel-5.2.jar asm p1.asm

	./qpc p2.qp p2.asm
	java -classpath .:./bcel-5.2.jar asm p2.asm

	./qpc p3.qp p3.asm
	java -classpath .:./bcel-5.2.jar asm p3.asm

nasm_test:
	./qpc p1.qp > p1.asm
	nasm -f elf p1.asm -o p1.o
	ld -o p1 p1.o _start.o __main.o io.o -lc

	./qpc p2.qp > p2.asm
	nasm -f elf p2.asm -o p2.o
	ld -o p2 p2.o _start.o __main.o io.o -lc

	./qpc p3.qp > p3.asm
	nasm -f elf p3.asm -o p3.o
	ld -o p3 p3.o _start.o __main.o io.o -lc

p2:
	java -classpath .:./bcel-5.2.jar asm p2.asm 


