t1nman

syntax.c

Jul 19th, 2012
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.76 KB | None | 0 0
  1. /*
  2.  *  file:       syntax.c
  3.  *  date:       July, 2012
  4.  *  purpose:   
  5.  *  author:     Nick K.
  6.  */
  7.  
  8. #include "modules.h"
  9.  
  10. int syntax(struct lex_type lexChain[], int lexSize)
  11. {
  12.     int STATE = 0, i;
  13.    
  14.     for(i = 0; i <= lexSize; i++) {
  15.         switch(STATE) {
  16.             case 0: ++STATE;
  17.             case 1: if(strcmp(lexChain[STATE-1].lexem,"while") == 0){
  18.                     ++STATE;
  19.                     continue;
  20.                 }
  21.                 return 0;
  22.             case 2: if(strcmp(lexChain[STATE-1].lexem_class,"SPACE") == 0){
  23.                     ++STATE;
  24.                     continue;
  25.                 }
  26.                 return 0;
  27.             case 3: if((strcmp(lexChain[STATE-1].lexem_class,"IDENTIFIER") == 0) ||
  28.                 (strcmp(lexChain[STATE-1].lexem_class,"LOGCONST") == 0)){
  29.                     ++STATE;
  30.                     continue;
  31.                 }
  32.                 return 0;
  33.             case 4: if(strcmp(lexChain[STATE-1].lexem_class,"SPACE") == 0){
  34.                     ++STATE;
  35.                     continue;
  36.                 }
  37.                 return 0;
  38.             case 5: if(strcmp(lexChain[STATE-1].lexem,"do") == 0){
  39.                     ++STATE;
  40.                     continue;
  41.                 }
  42.                 return 0;
  43.             case 6: if(strcmp(lexChain[STATE-1].lexem_class,"SPACE") == 0){
  44.                     ++STATE;
  45.                     continue;
  46.                 }
  47.                 return 0;
  48.             case 7: if(strcmp(lexChain[STATE-1].lexem_class,"IDENTIFIER") == 0){
  49.                  ++STATE;
  50.                  continue;
  51.                 }
  52.                 return 0;
  53.             case 8: if(strcmp(lexChain[STATE-1].lexem_class,"ASSIGNS") == 0){
  54.                     ++STATE;
  55.                     continue;
  56.                 }
  57.                 return 0;
  58.             case 9: if(strcmp(lexChain[STATE-1].lexem_class,"IDENTIFIER") == 0){
  59.                 ++STATE;
  60.                 continue;
  61.                 }
  62.                 return 0;
  63.             case 10: if((strcmp(lexChain[STATE-1].lexem_class,"INDEX") == 0)||
  64.                     (strcmp(lexChain[STATE-1].lexem_class,"SPACE") == 0)){
  65.                     ++STATE;
  66.                     continue;
  67.                 }
  68.                 if(strcmp(lexChain[STATE-1].lexem_class,"SEMICOLON") == 0)
  69.                     return 1;
  70.                 return 0;
  71.             case 11: if(strcmp(lexChain[STATE-1].lexem_class,"SEMICOLON") == 0){
  72.                     return 1;
  73.                 }
  74.                    
  75.         }
  76.     }
  77.    
  78. }
Advertisement
Add Comment
Please, Sign In to add comment