Advertisement
Ishu_15hu

Pakhi_DFA

Nov 16th, 2019
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.75 KB | None | 0 0
  1. #include <stdio.h>
  2. #define TOTAL_STATES 7
  3. #define FINAL_STATES 5
  4. #define ALPHABET_CHARCTERS 2
  5. #define UNKNOWN_SYMBOL_ERR 0
  6. #define NOT_REACHED_FINAL_STATE 1
  7. #define REACHED_FINAL_STATE 5
  8. enum DFA_STATES{q0,q1,q2,q3,q4,q5,q6};
  9. enum input{a,b};
  10. int Accepted_states[FINAL_STATES]={q0,q1,q2,q3,q4};
  11. char str[];
  12. long cnt=0;
  13. long cnt1=0;
  14. char alphabet[ALPHABET_CHARCTERS]={'a','b'};
  15. int Transition_Table[TOTAL_STATES][ALPHABET_CHARCTERS];
  16. int Current_state=q0;
  17. void DefineDFA()
  18. {
  19.     Transition_Table[q0][a] = q1;
  20.     Transition_Table[q0][b] = q5;
  21.     Transition_Table[q1][a] = q2;
  22.     Transition_Table[q1][b] = q5;
  23.     Transition_Table[q2][a] = q3;
  24.     Transition_Table[q2][b] = q5;
  25.     Transition_Table[q3][a] = q4;
  26.     Transition_Table[q3][b] = q5;
  27.     Transition_Table[q4][a] = q6;
  28.     Transition_Table[q4][b] = q5;
  29.     Transition_Table[q5][a] = q6;
  30.     Transition_Table[q5][b] = q0;
  31.     Transition_Table[q6][a] = q6;
  32.     Transition_Table[q6][b] = q6;
  33.  
  34. }
  35. int DFA(char current_symbol)
  36. {
  37. int i,len;
  38.     for(len=0;len<ALPHABET_CHARCTERS; len++)
  39.         if(current_symbol==alphabet[len])
  40.             break;//stops if any character other than a or b
  41.     if(len==ALPHABET_CHARCTERS)
  42.          return UNKNOWN_SYMBOL_ERR;
  43.     for(i=0;i<FINAL_STATES;i++)
  44.  if((Current_state=Transition_Table[Current_state][len])
  45. ==Accepted_states[i])
  46.             return REACHED_FINAL_STATE;
  47.     return NOT_REACHED_FINAL_STATE;
  48. }
  49. int main(void)
  50. {
  51.     char current_symbol;
  52.     int result;
  53.  
  54.     DefineDFA();    //Fill transition table
  55.  
  56.     printf("Enter a string :\n");
  57.  
  58. string s
  59.     cin>>s
  60.     int a=0,b=0;
  61.     for(int i=0;i<s.size();i++)
  62.     {
  63.     if(s[i]=='a') a++
  64.         else b++;
  65.     }
  66.     if(a>4||b%2) cout<"Invalid"<<endl
  67.     else cout<<"Valid"<<endl;
  68.      
  69.     return 0;
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement