home *** CD-ROM | disk | FTP | other *** search
/ ftp.disi.unige.it / 2015-02-11.ftp.disi.unige.it.tar / ftp.disi.unige.it / pub / .person / CataniaB / teach-act / esempi / Comp-Sep / parser.c < prev    next >
C/C++ Source or Header  |  1999-05-13  |  1KB  |  79 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #include "getsym.h"
  5. #include "parser.h"  /* in questo caso  quesa inclusione non e' 
  6.             strettamente necessaria, perche'??? */
  7.  
  8. static symbol sym;
  9.  
  10.  
  11. void parse(void)
  12. {
  13.   sym = getsym();
  14.   parseE();
  15.   if (sym.kind == EQUAL)
  16.     {
  17.       printf("\n Successful parsing \n");
  18.       exit(EXIT_SUCCESS);
  19.     }
  20.   else
  21.     {
  22.       printf("\n Error: expecting equal symbol \n");
  23.       exit(EXIT_FAILURE);
  24.     }
  25. }
  26.  
  27. void parseE(void)
  28. {
  29.  
  30.   parseT();
  31.   if (sym.kind == PLUS || sym.kind == MINUS)
  32.     {
  33.       sym = getsym();
  34.       parseE();
  35.     }
  36. }
  37.  
  38. void parseT(void)
  39. {
  40.  
  41.   parseF();
  42.   if (sym.kind == TIMES || sym.kind == DIV)
  43.     {
  44.       sym = getsym();
  45.       parseT();
  46.     }
  47. }
  48.  
  49. void parseF(void)
  50. {
  51.  
  52.   switch(sym.kind)
  53.     {
  54.     case LPAR:
  55.       sym = getsym();
  56.       parseE();
  57.       if (sym.kind != RPAR)
  58.     {
  59.       printf("\n Error: expecting right parenthesis \n");
  60.       exit(EXIT_FAILURE);
  61.     }
  62.       sym = getsym();      
  63.       break;
  64.     case MINUS:
  65.       sym = getsym();
  66.       parseF();
  67.       break;
  68.     case NUMBER:
  69.       sym = getsym();
  70.       break;
  71.     default:
  72.       printf("\n Error: expecting left parenthesis or minus symbol or a number \n");
  73.       exit(EXIT_FAILURE);
  74.       break;
  75.     }
  76. }
  77.  
  78.  
  79.