Difference between revisions of "Compiladores/Aula Prática 12"

From Wiki**3

< Compiladores
(Resolução)
 
(4 intermediate revisions by the same user not shown)
Line 6: Line 6:
  
 
Traduza para Postfix (não optimizado) a seguinte função escrita em C:
 
Traduza para Postfix (não optimizado) a seguinte função escrita em C:
<c>
+
<source lang="c">
 
int *click(int *x, int dim) {
 
int *click(int *x, int dim) {
 
   int *res, i;
 
   int *res, i;
   for (i = dim -2, res = x+dim -1; i >= 0; i-- )
+
   for (i = dim-2, res = x+dim-1; i >= 0; i--)
     if (x [i ] > *res ) res = &x [i ];
+
     if (x[i] > *res) res = &x[i];
 
   return res;
 
   return res;
 
}
 
}
</c>
+
</source>
  
 
== Exercício 2 ==
 
== Exercício 2 ==
 
Traduza para Postfix (não optimizado) a seguinte função escrita em C:
 
Traduza para Postfix (não optimizado) a seguinte função escrita em C:
<c>
+
<source lang="c">
 
int main() {
 
int main() {
   extern void printd ( double );
+
   extern void printd(double);
 
   double d, e;
 
   double d, e;
 
   d = e = 3.3e-2;
 
   d = e = 3.3e-2;
   printd (d + e );
+
   printd(d + e);
 
   return 0;
 
   return 0;
 
}
 
}
</c>
+
</source>
  
 
== Exercício 3 ==
 
== Exercício 3 ==
 
Traduza para Postfix (não optimizado) a seguinte função escrita em C:
 
Traduza para Postfix (não optimizado) a seguinte função escrita em C:
<c>
+
<source lang="c">
 
void isort(int a[], int length) {
 
void isort(int a[], int length) {
 
   for (int i = 0; i < length; i++) {
 
   for (int i = 0; i < length; i++) {
Line 37: Line 37:
 
       a[j + 1] = a[j];
 
       a[j + 1] = a[j];
 
     }
 
     }
     a[j + 1] = v;
+
     a[i + 1] = v;
 
   }
 
   }
 
}
 
}
</c>
+
</source>
 +
 
 +
== Exercício 4 ==
 +
Traduza para código Postfix a seguinte função escrita em C:
 +
 
 +
<source lang="c">
 +
int main() {
 +
  int n = 45, i = 0, j = 1, *seg = &i;
 +
  while (n-- > 0) {
 +
    print(*seg = i + j);
 +
    seg = (seg == &i) ? &j : &i;
 +
  }
 +
  return 0;
 +
}
 +
</source>
  
 
== Resoluções ==
 
== Resoluções ==

Latest revision as of 02:07, 8 December 2018

Tópicos

Processamento semântico e geração de código Postfix (não optimizado).

Exercício 1

Traduza para Postfix (não optimizado) a seguinte função escrita em C:

int *click(int *x, int dim) {
  int *res, i;
  for (i = dim-2, res = x+dim-1; i >= 0; i--)
    if (x[i] > *res) res = &x[i];
  return res;
}

Exercício 2

Traduza para Postfix (não optimizado) a seguinte função escrita em C:

int main() {
  extern void printd(double);
  double d, e;
  d = e = 3.3e-2;
  printd(d + e);
  return 0;
}

Exercício 3

Traduza para Postfix (não optimizado) a seguinte função escrita em C:

void isort(int a[], int length) {
  for (int i = 0; i < length; i++) {
    int v = a[i];
    for (int j = i - 1; j >= 0; j--) {
      if (a[j] <= v) break;
      a[j + 1] = a[j];
    }
    a[i + 1] = v;
  }
}

Exercício 4

Traduza para código Postfix a seguinte função escrita em C:

int main() { 
  int n = 45, i = 0, j = 1, *seg = &i; 
  while (n-- > 0) {
    print(*seg = i + j); 
    seg = (seg == &i) ? &j : &i; 
  } 
  return 0; 
}

Resoluções