[text] cdd

Viewer

  1. //C program to implement Simple Code Generator.
  2. #include<stdio.h>
  3. #include<conio.h>
  4. #include<string.h>
  5. #include<ctype.h>
  6. #include<graphics.h>
  7. typedef struct
  8. { char var[10];
  9. int alive;
  10. }
  11. regist;
  12. regist preg[10];
  13. void substring(char exp[],int st,int end)
  14. { int i,j=0;
  15. char dup[10]="";
  16. for(i=st;i<end;i++)< span="" style="box-sizing: border-box;">
  17. dup[j++]=exp[i];
  18. dup[j]='0';
  19. strcpy(exp,dup);
  20. } int getregister(char var[])
  21. { int i;
  22. for(i=0;i<10;i++)
  23. {
  24. if(preg[i].alive==0)
  25. {
  26. strcpy(preg[i].var,var);
  27. break;
  28. }}
  29. return(i);
  30. }
  31. void getvar(char exp[],char v[])
  32. { int i,j=0;
  33. char var[10]="";
  34. for(i=0;exp[i]!='\0';i++)
  35. if(isalpha(exp[i]))
  36. var[j++]=exp[i];
  37. else
  38. break;
  39. strcpy(v,var);
  40. }
  41. void main()
  42. { char basic[10][10],var[10][10],fstr[10],op;
  43. int i,j,k,reg,vc,flag=0;
  44. clrscr();
  45. printf("\nEnter the Three Address Code:\n");
  46. for(i=0;;i++)
  47. {
  48. gets(basic[i]);
  49. if(strcmp(basic[i],"exit")==0)
  50. break;
  51. }
  52. printf("\nThe Equivalent Assembly Code is:\n");
  53. for(j=0;j<i;j++)< span="" style="box-sizing: border-box;">
  54. {
  55. getvar(basic[j],var[vc++]);
  56. strcpy(fstr,var[vc-1]);
  57. substring(basic[j],strlen(var[vc-1])+1,strlen(basic[j]));
  58. getvar(basic[j],var[vc++]);
  59. reg=getregister(var[vc-1]);
  60. if(preg[reg].alive==0)
  61. {
  62. printf("\nMov R%d,%s",reg,var[vc-1]);
  63. preg[reg].alive=1;
  64. }
  65. op=basic[j][strlen(var[vc-1])];
  66. substring(basic[j],strlen(var[vc-1])+1,strlen(basic[j]));
  67. getvar(basic[j],var[vc++]);
  68. switch(op)
  69. { case '+': printf("\nAdd"); break;
  70. case '-': printf("\nSub"); break;
  71. case '*': printf("\nMul"); break;
  72. case '/': printf("\nDiv"); break;
  73. }
  74. flag=1;
  75. for(k=0;k<=reg;k++)
  76. { if(strcmp(preg[k].var,var[vc-1])==0)
  77. {
  78. printf("R%d, R%d",k,reg);
  79. preg[k].alive=0;
  80. flag=0;
  81. break;
  82. }} if(flag)
  83. {
  84. printf(" %s,R%d",var[vc-1],reg);
  85. printf("\nMov %s,R%d",fstr,reg);
  86. }strcpy(preg[reg].var,var[vc-3]);
  87. getch();
  88. }
  89. }

Editor

You can edit this paste and save as new:


File Description
  • cdd
  • Paste Code
  • 26 Apr-2024
  • 1.81 Kb
You can Share it: