head	2.2;
access;
symbols
	Comments:2.2;
locks; strict;
comment	@# @;


2.2
date	97.09.20.17.43.34;	author nestor;	state Exp;
branches;
next	;


desc
@Automatic generation of the utility p2ada, from regular expressions
and grammar descriptions to GNAT compilable source files. Allow
a quicker turn-around for experimentation or corrections.
@


2.2
log
@First introduction of the tool, replaces update.
@
text
@#!/bin/sh
# $Id$
# $Locker$
# $Log$
# Makefile for the syntactical source converter Pascal MacOS -> Ada 95
# Extended by Laurent Gasser, 17 September 1997 (lga@@sma.ch)
# Original p2ada by Martin C. Carlisle

TOOL        = p2ada
REGULAR_EXP = Pascal.l
GRAMMAR     = Pascal.y

# assign "MUTE = @@" to hide commands, or "MUTE = " to let them appear
# don't comment the definition! ("MUTE = # @@" fails)
MUTE     = 
ECHO     = @@ echo

AFLEX    = $(MUTE) /home/gasser/bin/aflex
AYACC    = $(MUTE) /home/gasser/bin/ayacc
GNATCHOP = $(MUTE) /usr/bin/gnatchop
GNATMAKE = $(MUTE) /usr/bin/gnatmake
MV       = $(MUTE) /bin/mv
RM       = $(MUTE) /bin/rm
AWK      = $(MUTE) /usr/bin/awk
SED      = $(MUTE) /usr/bin/sed

.SUFFIXES:

help:
	$(ECHO) 
	$(ECHO) " The following targets are available: "
	$(ECHO) "     all       : create" $(TOOL) "starting anew from" $(REGULAR_EXP) "and" $(GRAMMAR)
	$(ECHO) "     clean     : remove all compilation files, preserve all sources"
	$(ECHO) "     help      : this message"
	$(ECHO) 
	$(ECHO) "     essential : remove all compilation files, and all automatically"
	$(ECHO) "                 generated source files"
	$(ECHO) "     parser    : create sources from the grammar" $(GRAMMAR)
	$(ECHO) "     tokenizer : create sources from the regular expressions" $(REGULAR_EXP)
	$(ECHO) 

tokenizer: $(REGULAR_EXP) $(MAKEFILE)
	$(ECHO) 
	$(ECHO) " GENERATE RAW SOURCES for the" $@@
	$(ECHO)
	$(AFLEX) -i -i < $(REGULAR_EXP)
	$(ECHO)
	$(ECHO) " PREPARE SOURCES FOR GNAT"
	$(ECHO) 
	$(RM) -f pascal_dfa.ads pascal_dfa.adb
	$(SED) "s/aflex_yy_dfa/pascal_dfa/g" aflex_yy_dfa.a > pascal_dfa.a
	$(GNATCHOP) pascal_dfa.a
	$(RM) aflex_yy_dfa.a pascal_dfa.a
	$(ECHO)
	$(RM) -f pascal_io.ads pascal_io.adb
	$(SED) "s/aflex_yy_dfa/pascal_dfa/g" aflex_yy_io.a > a.oi_yy_xelfa
	$(SED) "s/aflex_yy_io/pascal_io/g" a.oi_yy_xelfa  > pascal_io.a 
	$(GNATCHOP) pascal_io.a
	$(RM) aflex_yy_io.a a.oi_yy_xelfa pascal_io.a
	$(ECHO)
	$(RM) -f pascalyylex.ads pascalyylex.adb
	$(SED) "s/YYLex/pascalYYLex/g" aflex_yy.a > a.yy_xelfa_1 
	$(SED) "s/aflex_yy_dfa/pascal_dfa/g" a.yy_xelfa_1 > a.yy_xelfa_2
	$(SED) "s/aflex_yy_io/pascal_io/g" a.yy_xelfa_2  > a.yy_xelfa_3
	$(SED) "s/47,   33,   48,    1,   49,    1,    1/47,   33,   48,    1,   49,    1,    1, others => 1/g" a.yy_xelfa_3 > pascalyylex.adb
	$(AWK) 'BEGIN{\
	print "WITH pascal_Tokens;"; \
	print "USE  pascal_Tokens;"; \
	print "function pascalYYLex return Token;";} \
	{} END{}' pascalyylex.ads > pascalyylex.ads 
	$(RM) aflex_yy.a a.yy_xelfa_1 a.yy_xelfa_2 a.yy_xelfa_3

parser: $(GRAMMAR) $(MAKEFILE)
	$(ECHO)
	$(ECHO) " GENERATE RAW SOURCES for the" $@@
	$(ECHO)
	$(AYACC) $(GRAMMAR)
	$(ECHO)
	$(ECHO) " PREPARE SOURCES FOR GNAT"
	$(ECHO)
	$(MV) Pascal.a yyparse.adb
	$(RM) -f yyparse.ads
	$(AWK) 'BEGIN{print "procedure yyparse;"} {} END{}' yyparse.ads > yyparse.ads
	$(MV) Pascal_goto.a pascal_goto.ads
	$(MV) Pascal_shift_reduce.a pascal_shift_reduce.ads
	$(MV) Pascal_tokens.a pascal_tokens.ads

all: tokenizer parser $(MAKEFILE)
	$(ECHO)
	$(ECHO) " GENERATE THE TOOL" $(TOOL)
	$(ECHO)
	$(GNATMAKE) $(TOOL)

clean:
	$(ECHO)
	$(ECHO) " REMOVE ALL COMPILATION FILES"
	$(ECHO)
	$(RM) -f *.ali *.o

essential: clean
	$(ECHO)
	$(ECHO) " REMOVE ALL AUTOMATICALLY GENERATED FILES"
	$(ECHO)
	$(RM) -f pascal_dfa.adb pascal_dfa.ads pascal_goto.ads
	$(RM) -f pascal_io.adb pascal_io.ads pascal_shift_reduce.ads
	$(RM) -f pascal_tokens.ads pascalyylex.adb pascalyylex.ads
	$(RM) -f yyparse.adb yyparse.ads@
