Advertisement
nex036ara

Skener

Oct 15th, 2012
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.12 KB | None | 0 0
  1. /*
  2. Napraviti C program za analizu ulaznog teksta na osnovu tekst gramatike. Program
  3. treba da prepoznaje simbole (reči i tačku). Reči su u tekstu razdvojene belinama
  4. (razmak, tabulator, novi red). Za svaki prepoznati simbol, program u novom redu
  5. treba da ispiše ime tokena (_CAPITAL_WORD, _WORD ili _DOT).
  6. Ukoliko program, u toku analize teksta, sa ulaza preuzme znak koji nije definisan
  7. gramatikom simbola, treba da u novom redu ispiše "GRESKA:" i iza toga znak koji
  8. nije u skladu sa gramatikom.
  9.  
  10. Za ulaz: Ovo je tekst. izlaz treba da bude:
  11. Ovo     _CAPITAL_WORD
  12. je      _WORD
  13. tekst   _WORD
  14. .       _DOT
  15.  
  16. */
  17.  
  18. #include <ctype.h>
  19. #include <stdio.h>
  20.  
  21.  
  22. enum States {NULA = 0,JEDAN,DVA,TRI, CETIRI, PET, GRESKA}state;
  23.  
  24. int main() {
  25.  
  26.     int  c;
  27.     state = NULA;
  28.  
  29.  
  30. while(1) {
  31.  
  32.  
  33. switch(state) {
  34.  
  35.     case NULA:
  36.  
  37.         c = getc(stdin);
  38.  
  39.          if( c==EOF ) {break;}
  40.  
  41.             else {
  42.  
  43.  
  44.             if( isupper(c) ) {state = DVA;}
  45.                 else if( islower(c) ) {state = CETIRI;}
  46.                     else if (c == '.') {state = JEDAN;}
  47.                         else if(c==32 || c==10) {state = NULA;}
  48.                        else {state = GRESKA;}
  49.             }
  50.  
  51.         break;
  52.  
  53.  
  54.  
  55.         case JEDAN:
  56.         printf("_DOT \t");
  57.         state = NULA;
  58.         break;
  59.  
  60.  
  61.         case DVA:
  62.         c = getc(stdin);
  63.         if(c==EOF) {break;}
  64.  
  65.         else {
  66.  
  67.         if(! islower(c) ) {
  68.         ungetc(c, stdin);
  69.         state = TRI;
  70.         }
  71.  
  72.         }
  73.         break;
  74.  
  75.  
  76.         case TRI:
  77.         printf("_CAPITAL_WORD \t");
  78.         state = NULA;
  79.         break;
  80.  
  81.  
  82.         case CETIRI:
  83.         c = getc(stdin);
  84.         if(c==EOF) {break;}
  85.  
  86.         else{
  87.  
  88.         if(!islower(c) ) {
  89.  
  90.         ungetc(c, stdin);
  91.         state = PET;
  92.         }
  93.  
  94.         }
  95.         break;
  96.  
  97.  
  98.  
  99.  
  100.  case PET:
  101.         printf("_WORD \t");
  102.         state = NULA;
  103.         break;
  104.  
  105. case GRESKA:
  106.  
  107.         printf("Greska:");
  108.         printf("Unet je znak %c \n", (char)c);
  109.         state = NULA;
  110.         break;
  111.  
  112. default:
  113.     printf(".....................................");
  114.     }
  115.  
  116.     }
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement