home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 1999 mARCH
/
PCWK3A99.iso
/
Linux
/
DDD331
/
DDD-3_1_.000
/
DDD-3_1_
/
ddd-3.1.1
/
ddd
/
yacctoC
< prev
next >
Wrap
Text File
|
1998-05-21
|
3KB
|
108 lines
#! /bin/sh
# $Id: yacctoC,v 1.9 1998/05/21 18:45:59 zeller Exp $
# adapt yacc template for C++ use
# Copyright (C) 1995 Technische Universitaet Braunschweig, Germany.
# Written by Andreas Zeller <zeller@ips.cs.tu-bs.de>.
#
# This file is part of the ICE Library.
#
# The ICE Library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Library General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# The ICE Library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Library General Public License for more details.
#
# You should have received a copy of the GNU Library General Public
# License along with the ICE Library -- see the file COPYING.LIB.
# If not, write to the Free Software Foundation, Inc.,
# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# ICE is the incremental configuration environment.
# For details, see the ICE World-Wide-Web page,
# `http://www.cs.tu-bs.de/softech/ice/',
# or send a mail to the ICE developers <ice@ips.cs.tu-bs.de>.
this=`basename $0`
path=`dirname $0`
if [ ! -f y.tab.c -a ! -f y.tab.h ]; then
echo $this: neither y.tab.c nor y.tab.h found >&2
exit 1
fi
# prefer system V sed (does not strip initial space)
sed=sed
if [ -f /usr/5bin/sed ]; then
sed=/usr/5bin/sed
fi
static=cat
if [ "$1" = -static ]; then
static="/bin/sh $path/make-static"
shift
fi
prefix=cat
if [ "$1" = -prefix ]; then
prefix="$sed s!yy!$2!g"
shift 2
fi
if [ $# != 0 ]; then
echo "$this: usage: $this [-static] [-prefix PREFIX]" >&2
exit 1
fi
for file in y.tab.c y.tab.h; do
if [ ! -f $file ]; then
continue
fi
case $file in
y.tab.c) target=y.tab.C;;
y.tab.h) target=y.tab.H;;
esac
head $file | grep "using $this" > /dev/null
if [ $? = 0 ]; then
echo $this: $file is already in C++ format >&2
continue
fi
if [ $file = y.tab.c ]; then
grep '@(#)yaccpar.*SMI' $file > /dev/null
if [ $? = 0 ]; then
yaccpar=sun
fi
grep 'Bison parser' $file > /dev/null
if [ $? = 0 ]; then
yaccpar=bison
fi
if [ "$yaccpar" = "" ]; then
echo "$this: cannot determine yaccpar type -- reverting to bison" >&2
yaccpar=bison
fi
script=$path/$this.$yaccpar
else
script=$path/$this.h
fi
$sed -f $script $file | $static | $prefix > $target
diff -D__cplusplus $file $target > y.tmp
$sed -e 's!#else *__cplusplus$!#else!
s!#endif *__cplusplus$!#endif /* __cplusplus */!' y.tmp > $file
done
rm -f y.tmp
exit 0