Ask Experts Questions for FREE Help !
Ask
    sahar rezaei's Avatar
    sahar rezaei Posts: 1, Reputation: 1
    New Member
     
    #1

    Apr 1, 2009, 07:12 AM
    Nfa to Dfa
    Hiii every body
    I need a program(in c or any other language)which convert NFA to Dfa
    Is there any one who can help me?
    Thanks in advance
    sivaitvlr's Avatar
    sivaitvlr Posts: 2, Reputation: 1
    New Member
     
    #2

    Apr 18, 2009, 10:48 PM
    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    int j,start;
    char re[50];
    int fn(int I,int end,int one)
    {

    if(re[i]=='*')
    {
    start=end;
    printf("%d->%d:%c\n",one,start+1,'^');
    printf("%d->%d:%c\n",one,start+3,'^');
    one++;
    if(isalpha(re[i-1]) || isdigit(re[i-1]))
    {
    printf("%d->%d:%c\n",one++,start+2,re[i-1]);
    }
    printf("%d->%d:%c\n",one,start+1,'^');
    printf("%d->%d:%c\n",one,start+3,'^');
    one++;
    end=start+3;
    return(end);
    }
    else if(re[i]=='+')
    {
    start=end;
    printf("%d->%d:%c\n",one++,start+1,'^');
    if(isalpha(re[i-1]) || isdigit(re[i-1]))
    printf("%d->%d:%c\n",one++,start+2,re[i-1]);
    printf("%d->%d:%c\n",one,start+1,re[i-1]);
    printf("%d->%d:%c\n",one++,start+3,'^');
    end=start+3;
    return(end);
    }
    else if(re[i]=='?')
    {
    start=end;
    printf("%d->%d:%c\n",one,start+1,'^');
    printf("%d->%d:%c\n",one++,start+3,'^');
    if(isalpha(re[i-1]) || isdigit(re[i=1]))
    printf("%d->%d:%c\n",one++,start+2,re[i-1]);
    printf("%d->%d:%c\n",one++,start+3,'^');
    end=start+3;
    return(end);
    }
    else if(re[i]=='|')
    {
    start=end;
    printf("%d->%d:%c\n",one,start+1,'^');
    printf("%d->%d;%c\n",one,start+3,'^');
    one++;
    if(isalpha(re[i-1]) || isdigit(re[i-1]))
    printf("%d->%d:%c\n",one++,start+2,re[i-1]);
    printf("%d->%d:%c\n",one++,start+5,'^');
    if(isalpha(re[i+1]) || isdigit(re[i+1]))
    printf("%d->%d:%c\n",one++,start+4,re[i+1]);
    printf("%d->%d:%c\n",one++,start+5,'^');
    end=start+5;
    return(end);
    }
    else if(re[i+1]!='|' && re[i-1]!='|' && re[i+1]!='*' && re[i+1]!='+' && re[i+1]!='?' )
    {
    start=end;
    if(isalpha(re[i]) || isdigit(re[i]))
    printf("%d->%d:%c\n",one++,start+1,re[i]);
    end=start+1;
    return(end);
    }
    else
    {
    return(end);
    }
    }
    void main()
    {
    FILE *fp,*fp1;
    int I,c=0,k,start=0,end=0,one=0;
    char name[20];
    clrscr();
    printf("\nEnter the file name:");
    scanf("%s",name);
    fp=fopen(name,"r");
    //fp1=fopen("nfa.txt","w");
    if(fp==NULL)
    {
    printf("\nCannot open file");
    exit();
    }
    //printf("\nopen the file nfa to verify the output");
    while(!feof(fp))
    {
    end=start=one=0;
    if(fgets(re,50,fp)!=NULL)
    {
    printf("\nRE:%s\n",re);
    for(I=0;re[i]!=NULL;i++)
    {
    if(re[i]=='(')
    {
    j=i;
    for(re[j]='(';re[j]!=')';j++)
    c++;
    if(re[j]==')')
    {
    if(re[j+1]=='*')
    {
    start=end;
    k=one;
    printf("%d->%d:%c\n",one++,start+1,'^');
    end=start+1;
    I++;
    for(;re[i]!=')';i++)
    {
    end=fn(I,end,one);
    }
    start=end;
    printf("%d->%d:%c\n",k,start+1,'^');
    printf("%d->%d:%c\n",end,start+1,'^');
    printf("%d->%d:%c\n",end,k+1,'^');
    end=start+1;
    one=end;
    }
    }
    I=c+1;
    }
    else
    {
    end=fn(I,end,one);
    one=end;
    }
    }
    }
    }
    getch();
    }

Not your question? Ask your question View similar questions

 

Question Tools Search this Question
Search this Question:

Advanced Search

Add your answer here.



View more questions Search