0% found this document useful (0 votes)
142 views8 pages

Exp-2-Conversion of RE To NFA

The document describes an experiment to convert a regular expression to a non-deterministic finite automaton (NFA). It outlines the steps taken: writing C++ code to implement the conversion algorithm, compiling and running the code, and verifying the output. The code uses a two-dimensional array to represent the transition function of the NFA. It handles the operators for concatenation, union, and Kleene closure in regular expressions. Screenshots confirm the code runs and matches the transition table of a manual solution. The result is that the conversion of a regular expression to NFA was successfully implemented and verified through this experiment.

Uploaded by

Harikrishnaa S
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
142 views8 pages

Exp-2-Conversion of RE To NFA

The document describes an experiment to convert a regular expression to a non-deterministic finite automaton (NFA). It outlines the steps taken: writing C++ code to implement the conversion algorithm, compiling and running the code, and verifying the output. The code uses a two-dimensional array to represent the transition function of the NFA. It handles the operators for concatenation, union, and Kleene closure in regular expressions. Screenshots confirm the code runs and matches the transition table of a manual solution. The result is that the conversion of a regular expression to NFA was successfully implemented and verified through this experiment.

Uploaded by

Harikrishnaa S
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 8

Compiler Design

Experiment-2
Conversion of RE to NFA
Harikrishnaa S

RA1911026010012

Aim: To convert given Regular Expression(RE) to Non-Deterministic Finite


Automata(NFA).

Procedure and Algorithm:

Step1: Open a C++ compiler and write the code using the following logic or
copy paste the code.

Step2: Compile the code

Step3: Execute the code

Step4: Verify the output

Step5: Complete the document.

Source Code:
#include<stdio.h>

#include<string.h>

int main()

char reg[20];

int q[20][3],i,j,len,a,b;

for(a=0;a<20;a++)

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

{
q[a][b]=0;

scanf("%s",reg);

len=strlen(reg);

i=0;

j=1;

while(i<len)

if(reg[i]=='a'&&reg[i+1]!='|'&&reg[i+1]!='*')

q[j][0]=j+1;

j++;

if(reg[i]=='b'&&reg[i+1]!='|'&&reg[i+1]!='*')

q[j][1]=j+1;

j++;

if(reg[i]=='e'&&reg[i+1]!='|'&&reg[i+1]!='*')

q[j][2]=j+1;

j++;

if(reg[i]=='a'&&reg[i+1]=='|'&&reg[i+2]=='b')

q[j][2]=((j+1)*10)+(j+3);

j++;

q[j][0]=j+1;

j++;
q[j][2]=j+3;

j++;

q[j][1]=j+1;

j++;

q[j][2]=j+1;

j++;

i=i+2;

if(reg[i]=='b'&&reg[i+1]=='|'&&reg[i+2]=='a')

q[j][2]=((j+1)*10)+(j+3);

j++;

q[j][1]=j+1;

j++;

q[j][2]=j+3;

j++;

q[j][0]=j+1;

j++;

q[j][2]=j+1;

j++;

i=i+2;

if(reg[i]=='a'&&reg[i+1]=='*')

q[j][2]=((j+1)*10)+(j+3);

j++;

q[j][0]=j+1;

j++;

q[j][2]=((j+1)*10)+(j-1);

j++;
}

if(reg[i]=='b'&&reg[i+1]=='*')

q[j][2]=((j+1)*10)+(j+3);

j++;

q[j][1]=j+1;

j++;

q[j][2]=((j+1)*10)+(j-1);

j++;

if(reg[i]==')'&&reg[i+1]=='*')

q[0][2]=((j+1)*10)+1;

q[j][2]=((j+1)*10)+1;

j++;

i++;

printf("Transition function \n");

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

if(q[i][0]!=0)

printf("\n q[%d,a]-->%d",i,q[i][0]);

if(q[i][1]!=0)

printf("\n q[%d,b]-->%d",i,q[i][1]);

if(q[i][2]!=0)

if(q[i][2]<10)

printf("\n q[%d,e]-->%d",i,q[i][2]);

else
printf("\n q[%d,e]-->%d & %d",i,q[i][2]/10,q[i][2]%10);

return 0;

Output:

Screenshot of code:
Screenshot of output:

Manual NFE Diagram Transition Table:


Result: Hence the conversion of Regular Expression(RE) to Non-Deterministic
Finite Automata(NFA) was done successfully using code and was verified with
the output of the manual solution.

You might also like