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 >
Text File  |  1998-05-21  |  3KB  |  108 lines

  1. #! /bin/sh
  2. # $Id: yacctoC,v 1.9 1998/05/21 18:45:59 zeller Exp $
  3. # adapt yacc template for C++ use
  4.  
  5. # Copyright (C) 1995 Technische Universitaet Braunschweig, Germany.
  6. # Written by Andreas Zeller <zeller@ips.cs.tu-bs.de>.
  7. # This file is part of the ICE Library.
  8. # The ICE Library is free software; you can redistribute it and/or
  9. # modify it under the terms of the GNU Library General Public
  10. # License as published by the Free Software Foundation; either
  11. # version 2 of the License, or (at your option) any later version.
  12. # The ICE Library is distributed in the hope that it will be useful,
  13. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  15. # See the GNU Library General Public License for more details.
  16. # You should have received a copy of the GNU Library General Public
  17. # License along with the ICE Library -- see the file COPYING.LIB.
  18. # If not, write to the Free Software Foundation, Inc.,
  19. # 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  20. # ICE is the incremental configuration environment.
  21. # For details, see the ICE World-Wide-Web page, 
  22. # `http://www.cs.tu-bs.de/softech/ice/',
  23. # or send a mail to the ICE developers <ice@ips.cs.tu-bs.de>.
  24.  
  25. this=`basename $0`
  26. path=`dirname $0`
  27.  
  28. if [ ! -f y.tab.c -a ! -f y.tab.h ]; then
  29.   echo $this: neither y.tab.c nor y.tab.h found >&2
  30.   exit 1
  31. fi
  32.  
  33. # prefer system V sed (does not strip initial space)
  34. sed=sed
  35. if [ -f /usr/5bin/sed ]; then
  36.   sed=/usr/5bin/sed
  37. fi
  38.  
  39. static=cat
  40. if [ "$1" = -static ]; then
  41.   static="/bin/sh $path/make-static"
  42.   shift
  43. fi
  44.  
  45. prefix=cat
  46. if [ "$1" = -prefix ]; then
  47.   prefix="$sed s!yy!$2!g"
  48.   shift 2
  49. fi
  50.  
  51. if [ $# != 0 ]; then
  52.   echo "$this: usage: $this [-static] [-prefix PREFIX]" >&2
  53.   exit 1
  54. fi
  55.   
  56. for file in y.tab.c y.tab.h; do
  57.  
  58.   if [ ! -f $file ]; then
  59.     continue
  60.   fi
  61.  
  62.   case $file in
  63.     y.tab.c) target=y.tab.C;;
  64.     y.tab.h) target=y.tab.H;;
  65.   esac
  66.  
  67.   head $file | grep "using $this" > /dev/null
  68.   if [ $? = 0 ]; then
  69.     echo $this: $file is already in C++ format >&2
  70.     continue
  71.   fi
  72.  
  73.   if [ $file = y.tab.c ]; then
  74.     grep '@(#)yaccpar.*SMI' $file > /dev/null
  75.     if [ $? = 0 ]; then
  76.       yaccpar=sun
  77.     fi
  78.  
  79.     grep 'Bison parser' $file > /dev/null
  80.     if [ $? = 0 ]; then
  81.       yaccpar=bison
  82.     fi
  83.   
  84.     if [ "$yaccpar" = "" ]; then
  85.       echo "$this: cannot determine yaccpar type -- reverting to bison" >&2
  86.       yaccpar=bison
  87.     fi
  88.     
  89.     script=$path/$this.$yaccpar
  90.   else
  91.     script=$path/$this.h
  92.   fi
  93.   
  94.   $sed -f $script $file | $static | $prefix > $target
  95.  
  96.   diff -D__cplusplus $file $target > y.tmp
  97.   $sed -e 's!#else *__cplusplus$!#else!
  98.   s!#endif *__cplusplus$!#endif /* __cplusplus */!' y.tmp > $file
  99.  
  100. done
  101. rm -f y.tmp
  102. exit 0
  103.