quarta-feira, 18 de dezembro de 2013

18.05.04.04 Instrução for

 

Exemplo

 

 

for index range min_index to max_index do

  sumValue +:= field[index];

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.

Em seguida, a variável de controle após o "for" é atribuída com o valor do 'limite inferior'.

O 'limite inferior' se encontra antes de "to".

Se 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 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'.

Se 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 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_statement ::=

'for' identifier 'range' expression [ 'to' | 'downto' ] expression 'do'

  statement

'end' 'for' .

 

 

 

Declaração

 

 

$ syntax expr: .for.().range.().to.().do.().end.for is     -> 25;

$ syntax expr: .for.().range.().downto.().do.().end.for is -> 25;

 

const proc: FOR_DECLS (in type: aType) is func

  begin

    const proc: for (inout aType: variable) range

        (in aType: lowerLimit) to (in aType: upperLimit) do

        (in proc: statements) end for is func

      begin

        variable := lowerLimit;

        if variable <= upperLimit then

          statements;

          while variable < upperLimit do

            incr(variable);

            statements;

          end while;

        end if;

      end func;

 

    const proc: for (inout aType: variable) range

        (in aType: upperLimit) downto (in aType: lowerLimit) do

        (in proc: statements) end for is func

      begin

        variable := upperLimit;

        if variable >= lowerLimit then

          statements;

          while variable > lowerLimit do

            decr(variable);

            statements;

          end while;

        end if;

      end func;

  end func;

 

FOR_DECLS(integer);

FOR_DECLS(char);

FOR_DECLS(boolean);

 

 

 

 

 

 

 

 

 

 

 

 

Nenhum comentário:

Postar um comentário