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.bison < prev    next >
Text File  |  1998-07-06  |  3KB  |  94 lines

  1. # $Id: yacctoC.bison,v 1.9 1998/07/06 11:27:26 zeller Exp $
  2. # Adapt BISON output for C++ usage
  3.  
  4. # Copyright (C) 1995 Technische Universitaet Braunschweig, Germany.
  5. # Written by Andreas Zeller <zeller@ips.cs.tu-bs.de>.
  6. # This file is part of the ICE Library.
  7. # The ICE Library is free software; you can redistribute it and/or
  8. # modify it under the terms of the GNU Library General Public
  9. # License as published by the Free Software Foundation; either
  10. # version 2 of the License, or (at your option) any later version.
  11. # The ICE Library is distributed in the hope that it will be useful,
  12. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  14. # See the GNU Library General Public License for more details.
  15. # You should have received a copy of the GNU Library General Public
  16. # License along with the ICE Library -- see the file COPYING.LIB.
  17. # If not, write to the Free Software Foundation, Inc.,
  18. # 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  19. # ICE is the incremental configuration environment.
  20. # For details, see the ICE World-Wide-Web page, 
  21. # `http://www.cs.tu-bs.de/softech/ice/',
  22. # or send a mail to the ICE developers <ice@ips.cs.tu-bs.de>.
  23.  
  24. # Declare functions
  25. 1i\
  26. // This file was modified for -*- C++ -*-\
  27. // using $RCSfile: yacctoC.bison,v $ $Revision: 1.9 $\
  28. extern void yyerror(char *s);\
  29. extern int yylex();\
  30.  
  31. # Make YYSTYPE a struct such that we can store class objects
  32. # (use anonymous unions to save space!)
  33. s!^typedef union\(.*\)$!typedef struct _YYSTYPE \1!
  34.  
  35. # We cannot use alloca with class objects.
  36. # Thus, we use new/delete instead (rather ugly).
  37.  
  38. # Make sure all is deleted when we exit
  39. \!^#ifndef alloca!i\
  40. // This deletes the "kill" array upon destruction.\
  41. // Will be used as automatic variable in yyparse().\
  42. // Added by $RCSfile: yacctoC.bison,v $\
  43. struct YYMEMHANDLER {\
  44.     YYSTYPE *kill;\
  45. \
  46.     YYMEMHANDLER():\
  47.     kill(0)\
  48.     {}\
  49.     ~YYMEMHANDLER()\
  50.     {\
  51.     if (kill != 0)\
  52.         delete[] kill;\
  53.         kill = 0;\
  54.     }\
  55. };\
  56.  
  57. # Use "my-alloca.h" instead of the huge `#if alloca' etc.
  58. \!^#ifndef alloca!,\!^#endif /\* alloca not defined.  \*/!c\
  59. #include "my-alloca.h"   /* Added by $RCSfile: yacctoC.bison,v $ */\
  60.  
  61.  
  62. \!.int yystacksize!a\
  63.   YYMEMHANDLER yymem; // Added by $RCSfile: yacctoC.bison,v $
  64.  
  65. # stack reallocation -> own code
  66. \!.*yyvs = (YYSTYPE \*!,\!__yy_memcpy!c\
  67. \
  68.       // Added by $RCSfile: yacctoC.bison,v $. \
  69.       YYSTYPE *new_yyvs = new YYSTYPE [yystacksize];\
  70.       if (new_yyvs == 0)\
  71.       {\
  72.           yyerror("parser stack overflow");\
  73.           return 2;\
  74.       }\
  75.       for (int yycopy = 0; yycopy < yystacksize; yycopy++)\
  76.       {\
  77.           new_yyvs[yycopy] = yyvs[yycopy];\
  78.       }\
  79.       delete[] yyvs; yyvs = new_yyvs;\
  80.       yymem.kill = yyvs; // make sure yyvs is deleted upon return \
  81.  
  82.  
  83. # malloc/free -> new/delete
  84. s!(\([^)]*\) *\*) *malloc *(\([^)]*\))!new \1[\2]!g
  85. s!free *(\([^)]*\))!delete [] \1!g
  86.  
  87. # malloc.h -> stdlib.h
  88. s!<malloc\.h>!<stdlib.h>!
  89.