Friday, 31 July 2020

1. RIGHT LINEAR GRAMMAR TO LEFT LINEAR GRAMMAR


Source code:

#include<stdio.h>

#include<conio.h>

#include<string.h>

#include<stdlib.h>


char rlgtr[5][5];

void main()

{

      char rhs[][3] = {"bB", "aB", "a", "b"};

      char lhs[4] = {'S', 'B', 'C', 'B'}, temp[5], a, c, b;

      char states[5], symb[5];

      int i, j, k = 0, l = 0, p, q, r;

 

      clrscr();

 

      for(i = 0; i < 4; i++)

      {

            if(i == 0)

            {

                  rlgtr[0][0] = lhs[0];

            }

     

            for( j = 0; j < i; j++)

            {

                  if(states[j] == lhs[i])

                  {

                        break;

                  }

            }

     

            if(j == i)

            {

                  states[l] = lhs[j];

                  l++;

            }

 

            for(j = 0; j < 3; j++)

            {

                  b = rhs[i][j];

                  if(b >= 97 && b <= 122)

                  temp[i] = b;

            }

 

            for(j = 0; j < i; j++)

            {

                  if(symb[j] == temp[i])

                  {

                        break;

                  }

            }

 

            if(j == i)

            {

                  symb[k] = temp[j];

                  k++;

            }

      }

 

      for(j = 0; j < l; j++)

      {

            a = states[j];

 

            for(p = 0; p < 4; p++)

            {

                  if(lhs[p] == a)

                  {

                        for(r = 0; r < k; r++)

                        {

                              if(rhs[p][0] == symb[r])

                              {

                                    if(rhs[p][1] != '\0')

                                    {

                                          rlgtr[j][r] = rhs[p][1];

                                    }

                                    if(rhs[p][1] == '\0')

                                    {

                                          rlgtr[j][r] = 'e';

                                    }

                              }

                        }

                  }

            }

      }

 

      printf("Transition Table For Right Linear Grammer:-\n\n");

 

      for(i = 0; i < k; i++)

      {

            printf("\t%c", symb[i]);

      }

 

      printf("\n\n");

 

      for(i = 0; i < l; i++)

      {

            printf("%c\t", states[i]);

 

            for(j = 0; j < k; j++)

            {

                  printf("%c\t", rlgtr[i][j]);

            }

 

            printf("\n\n");

      }

 

      printf("\n\nTransition Table For Left Linear Grammer:-\n\n");

 

      for(i = 0; i < k; i++)

      {

            printf("\t%c", symb[i]);

      }

 

      printf("\n\n");

 

      for(i = 0; i < l; i++)

      {

            for(j = 0; j < k; j++)

            {

                  if(rlgtr[i][j] == 'e')

                  {

                        rlgtr[i][j] = lhs[0];

                  }

            }

 

            if(states[i] == 'S')

            {

                  states[i] = 'e';

            }

      }

 

      for(i = 0; i < l; i++)

      {

            printf("%c\t", states[i]);

 

            for(j = 0; j < k; j++)

            {

                  printf("%c\t", rlgtr[i][j]);

            }

 

            printf("\n\n");

      }

 

      getch();

      clrscr();

 

      printf("Given Right Linear Grammer Is:-\n\n");

 

      for(i = 0; i < 4; i++)

      {

            printf("%c-->%s\n\n", lhs[i], rhs[i]);

      }

 

      printf("Converted Left Linear Grammer Is:-\n\n");

 

      for(i = 0; i < l; i++)

     {

            for(j = 0; j < k; j++)

            {

if(rlgtr[i][j] != '\0' && (rlgtr[i][j] >= 65 && rlgtr[i][j] <= 96) && states[i] != 'e')

                  {

                        printf("%c-->%c%c\n\n", rlgtr[i][j], states[i], symb[j]);

                  }

if(rlgtr[i][j] != '\0' && (rlgtr[i][j] >= 65 && rlgtr[i][j] <= 96) && states[i] == 'e')

                  {

                        printf("%c-->%c\n\n", rlgtr[i][j], symb[j]);

                  }

            }

      }

 

      getch();

}

Output:

Given Right Linear Grammer Is:-

 

S-->bB

 

B-->aB

 

C-->a

 

B-->b

 

Converted Left Linear Grammer Is:-

 

B-->b

 

S-->Bb

 

B-->Ba

 

S-->Ca

 

 


 


No comments:

Post a Comment

If you have any doubts please let me know