Advertisement
cyberpunk7925

AUTOMATA

May 7th, 2023
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.02 KB | None | 0 0
  1. DFA
  2. #include <stdio.h>
  3. #include <string.h>
  4. int main()
  5. {
  6.     char a[10];
  7.     printf("As the expression has to end with 01 as a substring it has 3 states 0,1,2\n");
  8.     printf("Enter the expression to be checked:\n");
  9.     scanf("%[^\n]s",a);
  10.     printf("%s\n",a);
  11.     int state = 0;
  12.     for (int i=0; i<strlen(a);i++){
  13.         if(state==0 && a[i]=='1'){
  14.             state = 0;
  15.         }
  16.         else if(state==0 && a[i]=='0'){
  17.             state = 1;
  18.         }
  19.         else if(state==1 && a[i]=='0'){
  20.             state=1;
  21.         }
  22.         else if(state==1 && a[i]=='1'){
  23.             state = 2;
  24.         }
  25.         else if(state==2 && a[i]=='0'){
  26.             state = 1;
  27.         }
  28.         else if(state==2 && a[i]=='1'){
  29.             state = 1;
  30.         }
  31.        
  32.     }
  33.     if(state==2){
  34.         printf("The expression is accepted as it reached the final state 2");
  35.     }
  36.     else{
  37.         printf("The expression is rejected as it didn't reach the final state, it is in state %d",state);
  38.     }
  39.     return 0;
  40. }
  41.  
  42. NFA
  43.  
  44. #include <stdio.h>
  45. #include <string.h>
  46.  
  47. int main()
  48. {
  49.     char a[10];
  50.     printf("Enter the input string:\n");
  51.     scanf("%[^\n]s",a);
  52.     int state = 0;
  53.     int i = 0;
  54.     int len = strlen(a);
  55.  
  56.     while(i < len){
  57.         if(state == 0 && a[i] == '0'){
  58.             state = 0;
  59.         }
  60.         else if(state == 0 && a[i] == '1'){
  61.             state = 1;
  62.         }
  63.         else if(state == 1 && a[i] == '0'){
  64.             state = 1;
  65.         }
  66.         else if(state == 1 && a[i] == '1'){
  67.             state = 2;
  68.         }
  69.         else if(state == 2 && a[i] == '0'){
  70.             state = 0;
  71.         }
  72.         else if(state == 2 && a[i] == '1'){
  73.             state = 2;
  74.         }
  75.  
  76.         i++;
  77.     }
  78.  
  79.     if(state == 2){
  80.         printf("The input string is accepted as it reached the final state 2.and ending with 11\n");
  81.     }
  82.     else{
  83.         printf("The input string is rejected as it didn't reach the final state, it is in state %d.\n", state);
  84.     }
  85.  
  86.     return 0;
  87. }
  88.  
  89. FIRST
  90. #include <stdio.h>
  91. #include <string.h>
  92. #include <ctype.h>
  93.  
  94. int num_nt;
  95. char nt[10];
  96. int p[10];
  97. char productions[10][10][10];
  98.  
  99. void find_first(char non_t) {
  100.     for (int i = 0; i < num_nt; i++) {
  101.         if (nt[i] == non_t) {
  102.             for (int j = 0; j < p[i]; j++) {
  103.                 char first = productions[i][j][0];
  104.                 if (isupper(first)) {
  105.                     find_first(first);
  106.                 } else {
  107.                     printf("%c ", first);
  108.                 }
  109.             }
  110.         }
  111.     }
  112. }
  113.  
  114. int main() {
  115.     printf("Enter number of non-terminals:\n");
  116.     scanf("%d", &num_nt);
  117.     printf("Enter non-terminals:\n");
  118.     for (int i = 0; i < num_nt; i++) {
  119.         scanf(" %c", &nt[i]);
  120.     }
  121.  
  122.     for (int i = 0; i < num_nt; i++) {
  123.         printf("Enter the number of productions for %c: ", nt[i]);
  124.         scanf("%d", &p[i]);
  125.         printf("Enter the productions for %c:\n", nt[i]);
  126.         for (int j = 0; j < p[i]; j++) {
  127.             scanf("%s", productions[i][j]);
  128.             printf("\n");
  129.         }
  130.     }
  131.  
  132.     for (int i = 0; i < num_nt; i++) {
  133.         printf("First ( %c ): ", nt[i]);
  134.         find_first(nt[i]);
  135.         printf("\n");
  136.     }
  137.     return 0;
  138. }
  139.  
  140. SYMBOL TABLE
  141.  
  142. PDA
  143. #include<stdio.h>
  144. #include<string.h>
  145. int top;
  146. char s[10];
  147. void push(int x)
  148. {
  149.   s[top++]=x;
  150. }
  151. void pop()
  152. {
  153.   top--;
  154. }
  155. int main()
  156. {
  157.   int i,n,state=0;
  158.   char a[10];
  159.   printf("Program For PDA Which Accpets Strings Of (a^n)(b^n)\n");
  160.   printf("Enter String:");
  161.   gets(a);
  162.   n=strlen(a);
  163.   top=-1;
  164.   for(i=0;i<n;i++)
  165.   {
  166.     if(a[i]=='a' && state==0)
  167.     {
  168.       push(a[i]);
  169.       state=0;
  170.     }
  171.     else if(a[i]=='b' && state==0)
  172.     {
  173.       pop(a[i]);
  174.       state=1;
  175.     }
  176.     else if(a[i]=='b' && state==1)
  177.     {
  178.       pop();
  179.       state=1;
  180.     }
  181.     else
  182.     {
  183.       break;
  184.     }
  185.   }
  186.   if(a[i]=='\0' && top==-1 && state==1)
  187.     state=100;
  188.   if(state==100)
  189.     printf("String Accepted.");
  190.   else
  191.     printf("String Rejected.");
  192.   return 0;
  193. }
  194.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement