home *** CD-ROM | disk | FTP | other *** search
- #! /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
-