home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 2 / crawlyvol2.bin / program / c / yaccsrc2 / ycpuni.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-05-19  |  1.1 KB  |  50 lines

  1.  
  2. # include "y2.h" 
  3.  
  4. void cpyunion( )
  5. {
  6.   /* copy the union declaration to the output, and the define file if present */
  7.  
  8.   int level,
  9.       c;
  10.   fprintf( ftable, "\n# line %d\n", lineno );
  11.   fprintf( ftable, "\n#define UNION 1\n" );
  12.   fprintf( ftable, "typedef union " );
  13.   if ( fdefine )
  14.     fprintf( fdefine, "\ntypedef union " );
  15.  
  16.   level = 0;
  17.   for ( ; ; )
  18.     {
  19.       if ( ( c = unix_getc( finput ) ) < 0 )
  20.         error( "EOF encountered while processing %%union" );
  21.       putc( c, ftable );
  22.       if ( fdefine )
  23.         putc( c, fdefine );
  24.  
  25.       switch ( c )
  26.         {
  27.  
  28.           case '\n' :
  29.             ++lineno;
  30.             break ;
  31.  
  32.           case '{' :
  33.             ++level;
  34.             break ;
  35.  
  36.           case '}' :
  37.             --level;
  38.             if ( level == 0 )
  39.               {
  40.                 /* we are finished copying */
  41.                 fprintf( ftable, " YYSTYPE;\n" );
  42.                 if ( fdefine )
  43.                   fprintf( fdefine,
  44.                            " YYSTYPE;\nextern YYSTYPE yylval;\n" );
  45.                 return;
  46.               }
  47.         }
  48.     }
  49. }
  50.