Exemplo
for
evenNumber range 0 to 10 step 2 do
write(evenNumber);
end
for;
Semântica:
Quando o símbolo "to" é usado na instrução for, a definição é como se segue:
Primeiro o 'limite inferior' e o
'limite superior' que estão após "range" e "to" são avaliados.
O limite inferior é atribuído a
'variável de controle' localizada após "for"
O 'limite inferior' se encontra
antes de "to".
Enquanto o valor da 'variável de
controle' for inferior ou igual ao 'limite superior' as instruções são
executadas.
Depois a 'variável de controle'
é incrementada com o valor após "step" e comparada com o 'limite
superior' novamente.
O ciclo comparar, executar e
incrementar é repetido até que a 'variável de controle' seja maior que o
'limite superior'.
Quando o símbolo "downto" é usado na instrução for, a definição é como se segue:
Primeiro o 'limite inferior' e o
'limite superior' que estão após "range" e "downto" são avaliados.
Em seguida, a variável de
controle após o "for" é atribuída com o valor do 'limite superior'.
Enquanto o valor da 'variável de
controle' for superior ou igual ao 'limite inferior' as instruções são
executadas.
Depois a 'variável de controle'
é decrementada com o valor após "step" e comparada com o 'limite inferior' novamente.
O ciclo comparar, executar e
decrementar é repetido até que a 'variável de controle' seja menor que o
'limite inferior.
Sintaxe:
for_step_statement
::=
'for'
identifier 'range' expression [ 'to' | 'downto' ] expression 'step' expression
'do'
statement
'end'
'for' .
Declaration:
$
syntax expr: .for.().range.().to.().step.().do.().end.for is -> 25;
$
syntax expr: .for.().range.().downto.().step.().do.().end.for is -> 25;
const
proc: FOR_STEP_DECLS (in type: aType) is func
begin
if getobj((inout aType param) +:= (in
integer param)) <> NIL then
const proc: for (inout aType: variable)
range (in aType: lowerLimit) to (in aType: upperLimit)
step (in integer: incr_step) do
(in proc: statements) end for is func
begin
variable := lowerLimit;
while variable <= upperLimit do
statements;
variable +:= incr_step;
end while;
end func;
end if;
if getobj((inout aType param) -:= (in
integer param)) <> NIL then
const proc: for (inout aType: variable)
range (in aType: upperLimit) downto (in aType: lowerLimit)
step (in integer: decr_step) do
(in proc: statements) end for is func
begin
variable := upperLimit;
while variable >= lowerLimit do
statements;
variable -:= decr_step;
end while;
end func;
end if;
end func;
FOR_STEP_DECLS(integer);
Nenhum comentário:
Postar um comentário