home *** CD-ROM | disk | FTP | other *** search
/ ftp.ee.pdx.edu / 2014.02.ftp.ee.pdx.edu.tar / ftp.ee.pdx.edu / pub / users / Harry / compilers / yapp / pre.c < prev    next >
C/C++ Source or Header  |  2003-05-23  |  2KB  |  83 lines

  1. /* main.c
  2. **
  3. ** Driver routine for the PCAT lexer.
  4. ** ... modified to use as a preprocessor for YAPP.
  5. **
  6. ** Harrry Porter, 10/8/98.
  7. **                11/4/98 - YAPP modifications.
  8. */
  9.  
  10. #include <stdio.h>
  11. #include <stdarg.h>
  12. #include "lexer.h"
  13.  
  14. int getToken (void);
  15. void lexError (char *msg);
  16.  
  17. union tokenValue tokenValue;
  18. int currentLine;
  19. int errorsDetected;
  20.  
  21.  
  22.  
  23. /* main()
  24. **
  25. ** Calls getToken in a loop until EOF, printing out each token as it goes.
  26. */
  27. main (void) {
  28.     int tok, oldLine;
  29.  
  30.     errorsDetected = 0;
  31.     currentLine = -99999;
  32.     /* getToken() returns 0 at end-of-file. */
  33.     printf("%d\n", EOFSYMBOL);
  34.     tok = getToken ();
  35.     while (1) {
  36.       printf("%d ", tok);
  37.       tok = getToken ();
  38.       if (tok != '=') {
  39.         lexError ("Expecting = in rule");
  40.       }
  41.       while (1) {
  42.         oldLine = currentLine;
  43.         tok = getToken ();
  44.         if (oldLine < currentLine) {
  45.           printf ("0\n");
  46.           break;
  47.         }
  48.         printf("%d ", tok);
  49.       }
  50.       oldLine ++;
  51.       if (oldLine < currentLine) {
  52.         printf ("0\n");
  53.         break;
  54.       }
  55.     }
  56.     currentLine = 1;
  57.     printf ("-1 ");
  58.     printf("%d ", tok);
  59.     while (1) {
  60.       tok = getToken ();
  61.       if (tok <= 0) {
  62.         break;
  63.       }
  64.       printf("%d ", tok);
  65.     }
  66.     printf("%d ", EOFSYMBOL);
  67.     if (errorsDetected) {
  68.     fprintf (stderr, "%d errors were detected!\n", errorsDetected);
  69.     }
  70. }
  71.  
  72.  
  73.  
  74. /* lexError (msg)
  75. **
  76. ** This routine is called to print an error message and the current line
  77. ** number.  It returns.
  78. */
  79. void lexError (char *msg) {
  80.     fprintf (stderr, "Error on line %d: %s\n", currentLine, msg);
  81.     errorsDetected++;
  82. }
  83.