Wednesday, 16 April 2014

// // Leave a Comment

Program for Register Requirement


Program for calculate Register Requirement for the given postfix notation

#include<stdio.h>
#include<conio.h>
#include<string.h>

struct rr
{
    char nm;
    int rr;
}r[200];

struct quard
{
    char op1,op2,op,r;
}q[5];
int j,k;
int search(char tmp)
{     int l=0;
    for(l=0;l<k;l++)
      {
         if(tmp==r[l].nm)
        return(r[l].rr);
      }
      return(-1);
 }

void main()
{
    char a[30],c='1';
    int i,len,LR,RR1;
    clrscr();
    printf("enter expression in postfix notation:\n ");
    scanf("%s",a);
    i=0;
    j=0;
    len=strlen(a);
    while(len!=1)
    {       i=0;
        while(a[i]!='\0')
        {
            if((a[i]=='+')||(a[i]=='-')||(a[i]=='*')||(a[i]=='/'))
            {    q[j].op1=a[i-2];
                q[j].op2=a[i-1];
                q[j].op=a[i];
                q[j].r=c;
                a[i-2]=c;
                c++;
                j++;
                for(;a[i+1]!='\0';i++)
                {
                   a[i-1]=a[i+1];
                }
                break;
            }  //if
              else
             i++;
        } //inner while
             len=len-2;
    }       //outer while
    printf("quard table is:\n\n");
    printf("op1\top2\top\tr\n");
    for(i=0;i<j;i++)
    {
        printf("%c\t%c\t%c\t%c\n",q[i].op1,q[i].op2,q[i].op,q[i].r);
    }

    //register requirement
    k=0;
    for(i=0;i<j;i++)
    {    if(i==0)
        {
            r[k].nm=q[i].op1;
            r[k].rr=1;
            k++;
            r[k].nm=q[i].op2;
            r[k].rr=0;
            k++;
            r[k].nm=q[i].op;
            r[k].rr=1;
            k++;
            r[k].nm=q[i].r;
            r[k].rr=r[k-1].rr;
            k++;
        }
       else
        {
            LR=search(q[i].op1);
            if(LR==-1)
             {
              r[k].nm=q[i].op1;
              r[k].rr=1;
              k++;
              LR=1;
             }
            RR1=search(q[i].op2);
            if(RR1==-1)
             {
              r[k].nm=q[i].op2;
              r[k].rr=0;
              k++;
              RR1=0;
             }
               r[k].nm=q[i].op;
             if(LR!=RR1)
                r[k].rr=(LR>RR1)?LR:RR1;
             else
                r[k].rr=LR+1;
             k++;
             r[k].nm=q[i].r;
             r[k].rr=r[k-1].rr;
             k++;
        }
       }
       printf("\nregister requirement table:\n");
       for(i=0;i<k;i++)
       {
        printf("%c\t%d\n",r[i].nm,r[i].rr);
       }

    getch();
}

Output:
(It is necessary to enter the expression in POSTFIX notation)




0 comments:

Post a Comment