C0s=\usr\lib\c0s.o
CS=\usr\lib\cs.lib
L=\usr\lib
I=\usr\include

$(f): parser.o eval.o lex.o storage.o string.o \
	$(f).o user.o p.o a.o
	cc	-o $(f) $(f).o parser.o eval.o lex.o \
        storage.o string.o a.o p.o user.o

$(f).o: $(f).pat $(f).slr format pattr eval.h $(f).h
	pattr -Ocw $(f)
	format -a $(f).atb a.c
	cp $(f).h userdefs.h
	cc -c a.c $(f).c

$(f).h:
	touch $(f).h

pattr: pattr.o pattrio.o
	cc -o pattr pattr.o pattrio.o

pattr.o: pattr.c pattr.h
	cc -c pattr.c

pattrio.o: pattrio.c pattr.h
	cc -c pattrio.c


p.o:	p.c 
	cc -c p.c
	
p.c:	$(f).ptb format
	format -p $(f).ptb p.c

format: format.c
	cc -o format format.c
parser.o:	parser.c
	cc -c parser.c
eval.o:	eval.c
	cc -c eval.c
lex.o:	lex.c
	cc -c lex.c
storage.o:	storage.c
	cc -c storage.c
string.o:	string.c
	cc -c string.c

user.o:	user.c
	cc -c user.c

# 
# PATTR - modular attribute generator
# ===================================
# usage:	pattr -cw file
# input:	file.slr	slr grammar
#    		file.pat	patterns = prototype + pattern
# output:	file.atb	attribute definition tables
#    		file.c		C source for attribute definition 
#				procedures
# 
# SLR - slr(1) parser generator
# =============================
# usage:	slr <file.slr >file.ptb
# input:	file.slr	slr grammar
# output:	file.ptb	parse tables
# 
# FORMAT - C source generator for tables
# ======================================
# usage:	format -p file.ptb > p.c
# input:	file.ptb	output from SLR
# output:	p.c		C source for parse tables
# ---------------------------------------
# usage:	format -a file.atb > a.c
# input:	file.atb	output from PATTR
# output:	a.c		C source for attribute definition tables
