Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Napraviti C program za analizu ulaznog teksta na osnovu tekst gramatike. Program
- treba da prepoznaje simbole (reči i tačku). Reči su u tekstu razdvojene belinama
- (razmak, tabulator, novi red). Za svaki prepoznati simbol, program u novom redu
- treba da ispiše ime tokena (_CAPITAL_WORD, _WORD ili _DOT).
- Ukoliko program, u toku analize teksta, sa ulaza preuzme znak koji nije definisan
- gramatikom simbola, treba da u novom redu ispiše "GRESKA:" i iza toga znak koji
- nije u skladu sa gramatikom.
- Za ulaz: Ovo je tekst. izlaz treba da bude:
- Ovo _CAPITAL_WORD
- je _WORD
- tekst _WORD
- . _DOT
- */
- #include <ctype.h>
- #include <stdio.h>
- enum States {NULA = 0,JEDAN,DVA,TRI, CETIRI, PET, GRESKA}state;
- int main() {
- int c;
- state = NULA;
- while(1) {
- switch(state) {
- case NULA:
- c = getc(stdin);
- if( c==EOF ) {break;}
- else {
- if( isupper(c) ) {state = DVA;}
- else if( islower(c) ) {state = CETIRI;}
- else if (c == '.') {state = JEDAN;}
- else if(c==32 || c==10) {state = NULA;}
- else {state = GRESKA;}
- }
- break;
- case JEDAN:
- printf("_DOT \t");
- state = NULA;
- break;
- case DVA:
- c = getc(stdin);
- if(c==EOF) {break;}
- else {
- if(! islower(c) ) {
- ungetc(c, stdin);
- state = TRI;
- }
- }
- break;
- case TRI:
- printf("_CAPITAL_WORD \t");
- state = NULA;
- break;
- case CETIRI:
- c = getc(stdin);
- if(c==EOF) {break;}
- else{
- if(!islower(c) ) {
- ungetc(c, stdin);
- state = PET;
- }
- }
- break;
- case PET:
- printf("_WORD \t");
- state = NULA;
- break;
- case GRESKA:
- printf("Greska:");
- printf("Unet je znak %c \n", (char)c);
- state = NULA;
- break;
- default:
- printf(".....................................");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement