Lab Experiment for compiler design lab Experiment

NivaTripathy1 7 views 4 slides Jul 18, 2024
Slide 1
Slide 1 of 4
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4

About This Presentation

Lab details


Slide Content

Lab Experiment

Write a C program to simulate lexical analyzer for validating operators. # include< stdio.h > void main() {     char s[5]; printf ("\ nEnter any operator: ");         gets(s);         switch(s[0]) {               case'>':     if(s[1]=='=')     printf ("\ nGreater than or equal");            else     printf ("\ nGreater than");     break;               case'<':     if(s[1]=='=') printf ("\ nLess than or equal");               else     printf ("\ nLess than");     break;               case'=':     if(s[1]=='=')     printf ("\ nEqual to");               else     printf ("\ nAssignment ");     break;               case'!':     if(s[1]=='=')     printf ("\ nNot Equal");                 else     printf ("\ nBit Not");     break;                 case'&':     if(s[1]=='&')     printf ("\ nLogical AND");                 else     printf ("\n Bitwise AND");     break;                 case'|':     if(s[1]=='|')     printf ("\ nLogical OR");                 else     printf ("\ nBitwise OR");     break;                 case'+':     printf ("\ nAddition ");     break;               case'-':     printf ("\ nSubstraction ");     break;               case'*':     printf ("\ nMultiplication ");     break;     case'/':     printf ("\ nDivision ");     break;     case'%':     printf ("\ nModulus ");     break;     default:     printf ("\n not a operator"); } }   

 writes a C program to recognize strings under the rule: ( a|b ) * a+b+c * #include < stdbool.h > #include < stdio.h > #include < string.h > enum my_dfa { S0, S4, P0, P1, err }; struct transition { enum my_dfa init_state , next_state ; char match; }; enum my_dfa final_states [] = {S4, P1}; int final_states_count = 2; bool is_final_state ( enum my_dfa state) { for ( int i = 0; i < final_states_count ; i ++) if ( final_states [ i ] == state) return true; return false; } struct transition transitions[] = { {S0, P0, 'a'}, {S0, S0, 'b'}, {S4, S4, 'c'}, {P0, P0, 'a'}, {P0, P1, 'b'}, {P1, P0, 'a'}, {P1, P1, 'b'}, {P1, S4, 'c'} };

Contd... int transitions_count = 8; enum my_dfa startup_state = S0; enum my_dfa do_transition ( enum my_dfa from, char chr ) { for ( int i = 0; i < transitions_count ; i ++) { if (transitions[ i ]. init_state == from && transitions[ i ].match == chr ) return transitions[ i ]. next_state ; } return err; } bool is_interesting (char chr ) { if (! chr ) return false; const char *alphabet = " abc "; return strchr (alphabet, chr ) != NULL; } bool match_string (char *input) { enum my_dfa crt_state = startup_state ; while ( is_interesting (*input)) { crt_state = do_transition ( crt_state , *input); input++; } return is_final_state ( crt_state ); } int main() { char input[256]; while ( scanf ("%256s", input) > 0) { if ( match_string (input)) { printf ("accepted\n"); } else { printf ("rejected\n"); } } }
Tags