Instruções
Uma instrução pode ocupar uma ou mais linhas, enquanto uma linha pode conter duas ou mais instruções.
Instruções de controle de fluxo (if, if–else, for, while, do–while e switch) podem ser aninhadas.
Rótulo de instrução
Um rótulo consiste em um identificador seguido por dois pontos (":"). Um rótulo é um "alvo de salto" para a instrução goto.
Cada instrução pode ser precedida por um rótulo. Deve haver uma instrução após o rótulo; uma instrução vazia é permitida.
O escopo de um rótulo é a função na qual ele é declarado (uma instrução goto não pode, portanto, saltar para fora da função atual para outra função).
Instrução composta
Uma instrução composta é uma série de zero ou mais instruções
cercadas por chaves ({ e }). A chave final (}) não deve ser seguida por um ponto e vírgula.
Qualquer instrução pode ser substituída por uma instrução composta.
Uma instrução composta também é chamada de bloco.
Uma instrução composta com zero instruções é um caso especial,
e é chamada de "instrução vazia".
Instrução de expressão
Qualquer expressão se torna uma instrução quando um ponto e vírgula (";") é anexado a ela. Uma expressão também se torna uma instrução quando apenas espaço em branco a segue na linha e a expressão não pode ser estendida para a próxima linha.
Instrução vazia
Uma instrução vazia não realiza nenhuma operação e consiste em um bloco composto com zero instruções; ou seja, consiste nos tokens "". Instruções vazias são usadas em instruções de controle de fluxo se não houver ação (por exemplo, while (!iskey()) ) ou ao definir um rótulo logo antes da chave de fechamento de uma instrução composta. Uma instrução vazia não termina com um ponto e vírgula.
assert expressão
Aborta o programa com um erro em tempo de execução se a expressão resultar logicamente em "falso".
break
Termina e sai da menor instrução do, for ou while que a contém de qualquer ponto dentro do loop que não seja o final lógico. A instrução break move o controle do programa para a próxima instrução fora do loop.
continue
Termina a iteração atual da menor instrução do, for ou while que a contém e move o controle do programa para a parte de condição do loop. Se a instrução de loop for uma instrução for, o controle move para a terceira expressão na instrução for (e depois para a segunda expressão).
do instrução while ( expressão )
Executa uma instrução antes da parte de condição (a cláusula while) ser avaliada. A instrução é repetida enquanto a condição for logicamente "verdadeira". A instrução é executada pelo menos uma vez.
exit expressão
Aborta o programa. A expressão é opcional, mas deve começar na mesma linha que a instrução exit se estiver presente. A instrução exit retorna o valor da expressão (mais a tag da expressão) ao aplicativo host, ou zero se nenhuma expressão exit estiver presente. O significado e propósito dos códigos de saída é definido pela implementação.
for ( expressão 1 ; expressão 2 ; expressão 3 ) instrução
Todas as três expressões são opcionais.
expressão 1 Avaliada apenas uma vez, e antes de entrar no loop. Esta expressão pode ser usada para inicializar uma variável. Esta expressão também pode conter uma declaração de variável, usando a sintaxe new. Uma variável declarada nesta expressão existe apenas no loop for.
expressão 2 Avaliada antes de cada iteração do loop e termina o loop se a expressão resultar logicamente em "falso". Se omitida, o resultado da expressão 2 é assumido como logicamente "verdadeiro".
expressão 3 Avaliada após cada execução da instrução. O controle do programa move da expressão 3 para a expressão 2 para a próxima iteração (condicional) do loop. A instrução for( ; ; ) é equivalente a while (true).
goto rótulo
Move o controle do programa (incondicionalmente) para a instrução que segue o rótulo especificado. O rótulo deve estar dentro da mesma função que a instrução goto (uma instrução goto não pode saltar para fora de uma função).
if ( expressão ) instrução 1 else instrução 2
Executa a instrução 1 se a expressão resultar logicamente em "verdadeiro". A cláusula else da instrução if é opcional. Se a expressão resultar logicamente em "falso" e uma cláusula else existir, a instrução associada à cláusula else (instrução 2) é executada.
Quando instruções if são aninhadas e cláusulas else estão presentes, um dado else é associado à instrução if precedente mais próxima no mesmo bloco.
return expressão
Termina a função atual e move o controle do programa para a instrução que segue a instrução de chamada. O valor da expressão é retornado como o resultado da função. A expressão pode ser uma variável de array ou um array literal.
A expressão é opcional, mas deve começar na mesma linha que a instrução return se estiver presente. Se ausente, o valor da função é zero.
sleep expressão
Aborta o programa, mas o deixa em um estado reiniciável. A expressão é opcional. Se incluída, a instrução sleep retorna o valor da expressão (mais a tag da expressão) ao aplicativo host. O significado e propósito dos códigos/tags de saída é definido pela implementação; tipicamente, um aplicativo usa a instrução sleep para permitir multitarefa leve de vários programas pawn concorrentes, ou para implementar funções "latentes".
state ( expressão ) automaton :nome
Muda o estado atual no autômato especificado. A expressão entre parênteses é opcional; se ausente, os parênteses devem ser omitidos também. O nome do autômato também é opcional, ao mudar o estado do autômato padrão, anônimo; se o nome do autômato estiver ausente, os dois pontos (":") devem ser omitidos também.
Abaixo estão dois exemplos de mudanças de estado incondicionais. O primeiro é para o autômato padrão:
state handshake
e o segundo para um autômato específico:
state gps:handshake
Frequentemente, se um estado muda ou não depende dos parâmetros do evento ou da condição do autômato como um todo. Como mudanças de estado condicionais são tão frequentes, a condição pode estar na própria instrução state. ∗ A condição segue a palavra-chave state, entre parênteses. O estado só mudará se a condição for logicamente "verdadeira".
A instrução state causa uma chamada implícita para a função entry para o estado indicado — se tal função entry existir.
switch ( expressão ) { lista de cases }
Transfere o controle para diferentes instruções dentro do corpo do switch dependendo do valor da expressão do switch. O corpo da instrução switch é uma instrução composta, que contém uma série de "cláusulas case".
Cada "cláusula case" começa com a palavra-chave case seguida por uma lista de constantes e uma instrução. A lista de constantes é uma série de expressões, separadas por vírgulas, que cada uma resulta em um valor constante. A lista de constantes termina com dois pontos. Para especificar um "intervalo" na lista de constantes, separe os limites inferior e superior do intervalo com um período duplo (".."). Um exemplo de intervalo é: "case 1..9:".
A instrução switch move o controle para uma "cláusula case" se o valor de uma das expressões na lista de constantes for igual ao resultado da expressão do switch.
A "cláusula default" consiste na palavra-chave default e dois pontos. A cláusula default é opcional, mas se for incluída, deve ser a última cláusula no corpo do switch. A instrução switch move o controle para a "cláusula default" se nenhuma das cláusulas case corresponder ao resultado da expressão.
Exemplo:
∗ A alternativa é incluir mudanças de estado incondicionais na construção comum if–else.
switch (weekday(12,31,1999))
{
case 0, 1: /* 0 == Sábado, 1 == Domingo */
print("fim de semana")
case 2:
print("Segunda-feira")
case 3:
print("Terça-feira")
case 4:
print("Quarta-feira")
case 5:
print("Quinta-feira")
case 6:
print("Sexta-feira")
default:
print("dia da semana inválido")
}
while ( expressão ) instrução
Avalia a expressão e executa a instrução se o resultado da expressão for logicamente "verdadeiro". Após a instrução ter sido executada, o controle do programa retorna à expressão novamente. A instrução é assim executada enquanto a expressão for verdadeira.
Identificadores: 97
Exemplo: 11 (assert)
Exemplo: 21 (break)
Exemplo: 27 (do while)
Exemplos: 9, 11, 21 (for)
Declarações de variáveis: 62 (for)
Exemplo: 7 (if else)
Exemplos: 11, 21 (return)
Veja página 40 para exemplos de mudanças de estado condicionais (state automaton)
funções "entry": 44 (state automaton)
Exemplos: 7, 21, 26 (while)