/* The program heading. The identifier can conflict with identifiers in
the statement. */
program primeSieve
/* This is all one block statement. A GRIP program in fact consists of
only one statement. */
{
/* Constant declarations. */
sievesize : constant 100;
/* Global variables. */
i count : integer;
/* An array. */
flags : integer [100];
/* Initialize count and flags. */
count <- 0;
/* If it isn't the C-style for loop :-) */
for (i <- 0; i < sievesize; i <- i + 1; /* This semicolon has to be here. */)
flags[i + 1] <- 1;
/* Now get to work! */
for (i <- 0; i < sievesize; i <- i + 1;)
/* This is a multi-branch form of if-then-else. */
cond { /* This is NOT a block statement. Negative. */
flags[i + 1] { /* This is another block-statement. */
/* Two local variables. */
k prime : integer;
prime <- 2 * i + 3;
k <- prime + i;
for (; k < sievesize; k <- k + prime;)
flags[k + 1] <- 0;
count <- count + 1;
}
/* Here would have been "else blablablablabla...", but primeSieve has no
need for "else blablablablabla..." */
}
/* I/O, unfortunately without the I. Maybe later ;-( */
put "The number of primes less than " sievesize " is " count;
}
/* This has all of the constructs available to a GRIP programmer. Not much, eh? :-| */