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.sun < prev   
Text File  |  1998-03-25  |  3KB  |  75 lines

  1. # $Id: yacctoC.sun,v 1.5 1998/03/25 12:46:58 zeller Exp $
  2. # Adapt YACC output for C++ usage
  3. # (Happens to be working on my Sun using SunOS 4.1.1)
  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. # Declare functions
  26. 1i\
  27. // This file was modified for -*- C++ -*-\
  28. // using $RCSfile: yacctoC.sun,v $ $Revision: 1.5 $\
  29. extern void yyerror(char *s);\
  30. extern int yylex();\
  31.  
  32. # Undeclare malloc and realloc (not needed in C++ version)
  33. s!extern char \*malloc(), \*realloc();!// &!
  34.  
  35. # Adapt yytoks[] to disable warnings
  36. \!^yytoktype!,\!^}!s![^,]*,[^,]*!{&}!
  37.  
  38. # Make YYSTYPE a struct such that we can store class objects
  39. # (use anonymous unions to save space!)
  40. s!^typedef union\(.*\)$!typedef struct _YYSTYPE \1!
  41.  
  42. # Make sure we use new/delete instead of malloc/free
  43. # (a MUST if we use class objects)
  44.  
  45. # (y*)malloc(x*sizeof(y)) -> new x[y]
  46. s!([^\*]*\* *) *malloc *(\([^\*]*\)\* *sizeof *(\([^)]*\)) *)!new \2[\1]!g
  47.  
  48. # free(x) -> delete[] x
  49. s!free *(\([^)]*\))!delete[] \1!g
  50.  
  51. # realloc -> own code
  52. \!.*yymaxdepth += YYMAXDEPTH!,\!}!c\
  53.             int new_yymaxdepth = yymaxdepth + YYMAXDEPTH;\
  54.             YYSTYPE *new_yyv = new YYSTYPE [new_yymaxdepth];\
  55.             int *new_yys = new int [new_yymaxdepth];\
  56.             if (new_yyv == 0 || new_yys == 0)\
  57.             {\
  58.                 yyerror( "yacc stack overflow" );\
  59.                 return(1);\
  60.             }\
  61.             for (unsigned yycopy = 0; yycopy < yymaxdepth; \
  62.                  yycopy++)\
  63.             {\
  64.                 new_yyv[yycopy] = yyv[yycopy];\
  65.                 new_yys[yycopy] = yys[yycopy];\
  66.             }\
  67.             yymaxdepth = new_yymaxdepth;\
  68.             delete[] yyv; yyv = new_yyv;\
  69.             delete[] yys; yys = new_yys;
  70.