For a description of the options used in the following examples, see CodeGenerationOptions.
>
|
|
Translate a simple expression and assign to the name ``w'' in the target code.
>
|
|
w = -2 * x * z + y * z + x;
| |
Translate a list and assign to an array with name ``w'' in the target code.
>
|
|
w[0][0] = x;
w[0][1] = 2 * y;
w[1][0] = 5;
w[1][1] = z;
| |
Translate a computation sequence. Optimize the input first.
>
|
|
s = 0.10e1 + x;
t1 = log(s);
t2 = exp(-x);
t = t2 * t1;
r = x * t + t2;
| |
Declare that x is a float and y is an integer. Return the result in a string.
>
|
|
| (1) |
Translate a procedure. Assume that all untyped variables have type integer.
>
|
f := proc(x, y, z) return x*y-y*z+x*z; end proc:
|
>
|
|
int f (int x, int y, int z)
{
return(y * x - y * z + x * z);
}
| |
Translate a procedure containing an implicit return. A new variable is created to hold the return value.
>
|
f := proc(n)
local x, i;
x := 0.0;
for i to n do
x := x + i;
end do;
end proc:
|
double f (int n)
{
double x;
int i;
double cgret;
x = 0.0e0;
for (i = 1; i <= n; i++)
{
x = x + (double) i;
cgret = x;
}
return(cgret);
}
| |
Translate a procedure accepting an Array as a parameter. Note that the indices are renumbered so that the C array starts at index 0.
>
|
f := proc(x::Array(numeric, 5..7))
return x[5]+x[6]+x[7];
end proc:
|
double f (double x[3])
{
return(x[0] + x[1] + x[2]);
}
| |
Translate a module with one exported and one local procedure.
>
|
m := module() export p; local q;
p := proc(x,y) if y>0 then trunc(x); else ceil(x); end if; end proc:
q := proc(x) sin(x)^2; end proc:
end module:
|
>
|
|
#include <math.h>
double q;
double p (double x, int y);
double q (double x)
{
return(pow(sin(x), 0.2e1));
}
double p (double x, int y)
{
if (0 < y)
return((double) (int)(x));
else
return(ceil(x));
}
| |
Translate an expression involving the max function.
cg0 = (x * x >= 1 / abs(x) ? x * x : 1 / abs(x));
| |