Pular para o conteúdo principal

Apêndices


Mensagens de erro

Quando o compilador encontra um erro em um arquivo, ele emite uma mensagem e, dependendo da classe do erro, ele define uma linha de retorno de erro correspondente. Existem três classes de erros:

ErroSignificado
Errors (Erros)Erros de sintaxe ou semânticos impossíveis de compilar; o compilador pula linhas de código até poder continuar a compilação; então, nenhum código de saída é gerado.
Fatal Errors (Erros fatais)Situações de erro que forçam o compilador a abortar imediatamente. Estes erros têm o risco de corromper dados no computador se não forem tratados. Estes erros também ocorrem por estouros de memória ou interrupção de E/S durante a compilação; Erros fatais não estão em todas as situações relacionados ao erro no código-fonte
Warnings (Avisos)Possíveis problemas semânticos ou não portabilidades na semântica. O código é provavelmente suspeito em termos de implementação. Avisos podem algumas vezes ser causados por extensões específicas do compilador que são habilitadas

Erros

IDTexto / Descrição
001expected token: "token", but found "token" - token esper "token", mas encontrado "token". Um símbolo necessário está faltando.
002only a single statement (or expression) can follow each "case" - apenas uma única instrução pode seguir cada "case". Cada rótulo de case deve ser seguido por uma instrução; você pode usar bloco composto.
003declaration of a local variable must appear in a compound block - uma declaração de variável local deve aparecer dentro de um bloco composto .
004function "name" is not implemented - função "nome" não está implementada. Há uma declaração forward, mas a função não existe.
005function may not have arguments - função não pode ter argumentos. Função main ou um callback de evento não pode ter argumentos.
006must be assigned to an array - o operando deve ser um array (ou seja, deve ser assinalado a um array).
007operator cannot be redefined - o operador não pode ser redefinido. Você não pode fornecer uma definição alternativa para alguns operadores.
008must be a constant expression; assumed zero - deve ser uma expressão constante; assumido zero. Um erro de sintaxe esperado para uma expressão constante.
009invalid array size (negative, zero or out of bounds) - tamanho de array inválido (negativo, zero ou fora dos limites).
010illegal function or declaration - função ou declaração ilegal. Uma sintaxe de função ou declaração de variável estava incorreta.
011invalid outside functions - inválido fora de funções. Uma instrução ou expressão deve estar dentro da definição de uma função.
012invalid function call, not a valid address - chamada de função inválida, não um endereço válido. A função é apenas declarada, mas nunca definida.
013no entry point (no public functions) - sem ponto de entrada (nenhuma função pública). O arquivo contém apenas código inativo ou apenas constantes.
014invalid statement; not in switch - instrução inválida; não está em switch. Os rótulos "case" e "default" existem apenas nas instruções switch.
015"default" must be the last clause in switch statement - "default" deve ser a última cláusula em uma instrução switch.
016multiple defaults in "switch" - vários defaults em "switch". Apenas uma cláusula default é permitida.
017undefined symbol string - símbolo indefinido. Uma string literal está mal formada.
018initialization data exceeds declared size - dados de inicialização excedem o tamanho declarado. Mais dados foi fornecido na inicialização do que cabe na variável/array.
019not a label: "name" - não é um rótulo: "nome". goto só permite um rótulo de destino.
020invalid symbol name "name" - nome de símbolo inválido "nome". O nome de variável contém caracteres inválidos.
021symbol already defined: "name" - símbolo já definido: "nome". O símbolo já foi definido anteriormente.
022must be lvalue (non-constant) - deve ser lvalue (não constante).A expressão deve ser uma variável que possa ser atribuída, não uma constante.
023array assignment must be simple assignment - a atribuição de array deve ser uma atribuição simples (sem +=, etc).
024"break" or "continue" is out of context - "break" ou "continue" está fora de contexto. Essas instruções são válidas apenas dentro de um loop.
025function heading differs from prototype - cabeçalho de função difere do protótipo. A definição da função e sua declaração forward não combinam.
026expected token: "number" - token esperado numérico. Um número literal era esperado na posição.
027invalid character constant - constante de caractere inválida. A constante de caractere tem comprimento incorreto.
028invalid subscript (not an array or too many subscripts): "name" - subscrição inválida (não é um array ou muitas subscrições): "nome".
029invalid expression, assumed zero - expressão inválida, assumido zero. Sintaxe errada na expressão.
030compound statement not closed at the end of file (started at line number) - instrução composta não fechada no final do arquivo (iniciada na linha número).
031unknown directive - diretiva desconhecida. O comando #pragma não é reconhecido.
032array index out of bounds (variable "name") - índice de array fora dos limites (variável "nome").
033array must be indexed (variable "name") - array deve ser indexado (variável "nome"). Você tentou usar um array sem um índice.
034argument does not have a default value (argument index) - argumento não tem um valor padrão (índice do argumento).
035argument type mismatch (argument index) - incompatibilidade de tipo de argumento (índice do argumento). A expressão não combina com o tipo esperado.
036empty statement - instrução vazia. O programa contém instruções vazias inesperadas/desnecessárias.
037invalid string (possibly non-terminated string) - string inválida (possivelmente string não terminada).
038extra characters on line - caracteres extras na linha. Existem caracteres extras após uma instrução.
039constant symbol has no size - símbolo constante sem tamanho. O operador sizeof não funciona em constantes numéricas.
040duplicate "case" label (value number) - rótulo "case" duplicado (valor número). O mesmo valor já está associado a outro label case.
041invalid ellipsis, array size is not known - reticências inválido, tamanho do array desconhecido.
042invalid combination of class specifiers - combinação inválida de especificadores de classe. Combinação de static e public não é permitida.
043character constant exceeds range for packed string - constante de caractere excede intervalo para string empacotada.
044positional parameters must precede all named parameters - parâmetros posicionais devem preceder todos os parâmetros nomeados.
045too many function arguments - muitos argumentos de função. Mais argumentos fornecidos do que a função declara.
046unknown array size (variable "name") - tamanho desconhecido de array. A dimensão do array não está definida.
047array sizes do not match, or destination array is too small - tamanhos de arrays não coincidem, ou array de destino é muito pequeno.
048array dimensions do not match - dimensões de arrays não coincidem. O número de dimensões difere.
049invalid line continuation - continuação de linha inválida. Código após \ no final de uma linha.
050invalid range - intervalo inválido. Ordem errada de valores (mínimo > máximo).
051invalid subscript, use "[]" operators on major dimensions - subscrição inválida, use operadores "[]" em dimensões maiores.
052multi-dimensional arrays must be fully initialized - arrays multidimensionais devem ser totalmente inicializados.
053exceeding maximum number of dimensions - excedendo número máximo de dimensões. Máximo de 3 dimensões (configurável).
054unmatched closing brace (" }") - chave de fechamento não correspondente ("}"). Há mais chaves de fechamento que de abertura.
055start of function body without function header - início do corpo da função sem cabeçalho de função.
056arrays, local variables and function arguments cannot be public (variable "name") - arrays, variáveis locais e argumentos de função não podem ser públicos.
057unfinished expression before compiler directive - expressão inacabada antes da diretiva do compilador. Faltou ";" na instrução anterior.
058duplicate argument; same argument is passed twice - argumento duplicado; o mesmo argumento é passado duas vezes.
059function argument may not have a default value (variable "name") - argumento de função não pode ter valor padrão quando argumento de referência é variável array.
060multiple "#else" directives between "#if ... #endif" - múltiplas diretivas "#else" entre "#if ... #endif".
061"#elseif" directive follows an "#else" directive - diretiva "#elseif" segue diretiva "#else".
062number of operands does not fit the operator - número de operandos não se encaixa no operador.
063function result tag of operator "name" must be "name" - tag de resultado de função do operador deve ser "nome".
064cannot change predefined operators - não é possível alterar operadores predefinidos.
065function argument may only have a single tag (argument number) - argumento de função só pode ter uma única tag (número do argumento).
066function argument may not be a reference argument or an array (argument "name") - argumento de função não pode ser referência nem array (argumento "nome").
067variable cannot be both a reference and an array (variable "name") - variável não pode ser tanto referência quanto array (variável "nome").
068invalid rational number precision in #pragma - precisão de número racional inválida em #pragma.
069rational number format already defined - formato de número racional já definido.
070rational number support was not enabled - suporte a números racionais não foi habilitado.
071user-defined operator must be declared before use (function "name") - operador definido pelo usuário deve ser declarado antes do uso (função "nome").
072"sizeof" operator is invalid on "function" symbols - operador "sizeof" é inválido em símbolos de "função".
073function argument must be an array (argument "name") - argumento de função deve ser um array (argumento "nome").
074#define pattern must start with an alphabetic character - padrão #define deve começar com um caractere alfabético.
075input line too long (after substitutions) - linha de entrada muito longa (após substituições).
076syntax error in the expression, or invalid function call - erro de sintaxe na expressão, ou chamada de função inválida.
077malformed UTF-8 encoding, or corrupted file: filename - codificação UTF-8 malformada, ou arquivo corrompido: nome do arquivo.
078function uses both "return" and "return <value>" - função usa tanto "return" quanto "return <valor>".
079inconsistent return types (array & non-array) - tipos de retorno inconsistentes (array e não-array).
080unknown symbol, or not a constant symbol (symbol "name") - símbolo desconhecido, ou não é um símbolo constante (símbolo "nome").
081cannot take a tag as a default value for an indexed array parameter (symbol "name") - não é possível usar tag como valor padrão para parâmetro de array indexado (símbolo "nome").
082user-defined operators and native functions may not have states - operadores definidos pelo usuário e funções nativas não podem ter estados.
083a function or variable may only belong to a single automaton (symbol "name") - uma função ou variável só pode pertencer a um único autômato (símbolo "nome").
084state conflict: one of the states is already assigned to another implementation (symbol "name") - conflito de estado: um dos estados já está atribuído a outra implementação (símbolo "nome").
085no states are defined for symbol "name" - nenhum estado está definido para o símbolo "nome".
086unknown automaton "name" - autômato desconhecido "nome".
087unknown state "name" for automaton "name" - estado desconhecido "nome" para autômato "nome".
088public variables and local variables may not have states (symbol "name") - variáveis públicas e locais não podem ter estados (símbolo "nome").
089state variables may not be initialized (symbol "name") - variáveis de estado não podem ser inicializadas (símbolo "nome").
090public functions may not return arrays (symbol "name") - funções públicas não podem retornar arrays (símbolo "nome").
091ambiguous constant; tag override is required (symbol "name") - constante ambígua; substituição de tag é necessária (símbolo "nome").

Erros Fatais

IDTexto / Descrição
100cannot read from file: "filename" - não é possível ler do arquivo: "nome do arquivo".
101cannot write to file: "filename" - não é possível escrever no arquivo: "nome do arquivo".
102table overflow: "table name" - estouro de tabela: "nome da tabela".
103insufficient memory - memória insuficiente.
104invalid assembler instruction "instruction" - instrução de montador inválida.
105numeric overflow, exceeding capacity - estouro numérico, excedendo capacidade.
106compiled script exceeds the maximum memory size (number bytes) - script compilado excede o tamanho máximo de memória (número de bytes).
107too many error/warning messages on one line - muitas mensagens de erro/aviso em uma linha.
108codepage mapping file not found - arquivo de mapeamento de página de código não encontrado.
109invalid path: "path" - caminho inválido: "caminho".
110assertion failed: expression - asserção falhou: expressão.
111user error: message - erro do usuário: mensagem. Gerada por #error ou #assert.

Avisos

IDTexto / Descrição
200symbol "name" is truncated to number characters - símbolo "nome" foi truncado para número de caracteres.
201redefinition of constant/macro (symbol "name") - redefinição de constante/macro (símbolo "nome").
202number of arguments does not match definition - número de argumentos não corresponde à definição.
203symbol is never used: "name" - símbolo nunca é usado: "nome".
204symbol is assigned a value that is never used: "name" - símbolo tem um valor atribuído que nunca é usado: "nome".
205redundant code: constant expression is zero - código redundante: expressão constante é zero.
206redundant test: constant expression is non-zero - teste redundante: expressão constante é não-zero.
207unknown "#pragma" - "#pragma" desconhecido.
208function with tag result used before definition, forcing reparse - função com resultado com tag usada antes da definição., forçando reparsear.
209function "name" should return a value - função "nome" deveria retornar um valor.
210possible use of symbol before initialization: "name" - possível uso de símbolo antes da inicialização: "nome".
211possibly unintended assignment - possível atribuição não intencional. "=" vs "==".
212possibly unintended bitwise operation - operação bitwise possivelmente não intencional. "&" vs "&&".
213tag mismatch - incompatibilidade de tag. Expressões têm tags diferentes.
214possibly a "const" array argument was intended: "name" - possivelmente um argumento de array "const" era pretendido: "nome".
215expression has no effect - a expressão não tem efeito. O resultado é descartado.
216nested comment - comentário aninhado. Comentários que abrem dentro de outros comentários.
217loose indentation - indentação inconsistente. Código mal formatado detectado.
218old style prototypes used with optional semicolum - protótipos de estilo antigo utilizaram ponto e vírgula opcional.
219local variable "name" shadows a variable at a preceding level - variável local "nome" obscureceu uma variável de um nível anterior.
220expression with tag override must appear between parentheses - expressão com substituição de tag deve aparecer entre parênteses.
221label name "name" shadows tag name - nome do rótulo "nome" obscurece nome de tag.
222number of digits exceeds rational number precision - número de dígitos excede a precisão do número racional.
223redundant "sizeof": argument size is always 1 (symbol "name") - "sizeof" redundante: tamanho do argumento é sempre 1 (símbolo "nome").
224indeterminate array size in "sizeof" expression (symbol "name") - tamanho de array indeterminado em expressão "sizeof" (símbolo "nome").
225unreachable code - código inalcançável. O código após return, break, continue ou goto não será executado.
226a]variable is assigned to itself (symbol "name") - variável é atribuída a si mesma (símbolo "nome").
227more initializers than enum fields - mais inicializadores que campos do enum.
228length of initializer exceeds size of the enum field - comprimento do inicializador excede o tamanho do campo do enum.
229index tag mismatch (symbol "name") - incompatibilidade de tag de índice (símbolo "nome").
230no implementation for state "name" in function "name", no fall-back - sem implementação para estado "nome" na função "nome", sem fallback.
231state specification on forward declaration is ignored - especificação de estado na declaração forward é ignorada.
232output file is written, but with compact encoding disabled - arquivo de saída é escrito, mas com codificação compacta desabilitada.
233state variable "name" shadows a global variable - variável de estado "nome" obscurece uma variável global.
234function is deprecated (symbol "name") - função está obsoleta (símbolo "nome"). Use a alternativa sugerida.
235public function lacks forward declaration (symbol "name") - função pública não tem declaração forward (símbolo "nome").
236unknown parameter in substitution (incorrect #define pattern) - parâmetro desconhecido na substituição (padrão #define incorreto).
237recursive function (symbol "name") - função recursiva (símbolo "nome"). Detectada inadvertidamente.
238mixing of string formats in a concatenation - mistura de formatos de string em uma concatenação.
239literal array/string passed to a non-const parameter - array/string literal passado para um parâmetro não const.
240reserved value for tag field (symbol "name") - valor reservado para campo de tag (símbolo "nome").
241A tag alters the value of a constant - uma tag altera o valor de uma constante.

O compilador

A linguagem PAWN requer que o código-fonte esteja em formato de texto ASCII. O compilador não suporta UNICODE de 16 bits, no entanto o analisador, reconhece arquivos codificados em UTF-8. Se o arquivo de entrada começa com uma Marca de Ordem de Bytes (BOM) para UTF-8, o compilador analisa o arquivo completo como UTF-8, caso contrário ele o interpreta como ASCII estendido.

Os escapes de caractere \xhhh e \ddd são inválidos para caracteres Unicode. Utilize as escapes de caractere \uhhhhh e \Uhhhhhhhh para especificar caracteres Unicode.

Para construção de caracteres em scripts, você pode usar a diretiva #pragma codepage (veja página 119) ou a opção de linha de comando do compilador "-c" (introduzida na seção).

As opções de linha de comando do compilador podem ser substituídas em parte por declarações no código-fonte. Por exemplo, o tamanho do stack pode ser ajustado usando a diretiva #pragma (veja páginas 117 a 128 para detalhes sobre as diretivas).

As opções de linha de comando são:

OpçãoDescrição
-aApenas assemblador; gera um arquivo .asm que contém o pseudo-código gerado para a máquina abstrata do PAWN. Os "nomes de instrução" no arquivo gerado são realmente diretivas para a ferramenta pawnasm, que pode montar o arquivo pseudo-código de volta para binário.
-C[+/-]Codificação compacta do binário, gerado ou não; sobrescreve a diretiva #pragma pack. Por padrão, a codificação compacta está habilitada.
-cnameNome da página de código ou nome do arquivo; por exemplo -ciso-8859-1. Se o nome não corresponder a uma página de código conhecida, ele é interpretado como um nome de arquivo.
-DpathDiretório de trabalho do compilador, para a tabela de símbolos e quaisquer arquivos temporários.
-d0Sem informação simbólica; desabilita a depuração. É impossível usar um depurador simbólico neste modo (mas depuração "printf-assembly" ainda é suportada).
-d1Informação simbólica suficiente para rastrear números de linha e nomes de funções; este é o nível padrão de informação de depuração.
-d2Informações simbólicas completas; mesma informação de depuração de d1, além de informações simbólicas locais e arrays de comprimento zero.
-d3Informações simbólicas completas (como d2) E verificações de tempo de execução habilitadas.
-e filenameRedirecionar mensagens de erro para o arquivo especificado.
-H value"window-handle" (identificador de janela) do ambiente de desenvolvimento integrado (IDE), para propósitos de notificação. O compilador enviará uma mensagem do Windows para a janela especificada quando terminar a compilação.
-i pathCaminho para arquivos include; múltiplas opções -i são permitidas.
-lCriar arquivo de listagem; este é um arquivo de texto com a fonte, o bytecode e a data de endereço.
-o filenameEspecifica nome (e caminho) para o arquivo de saída.
-O levelNível de otimização: 0 = sem otimização; 1 = verificações de célula única, propagação de constantes e otimização peephole; mais altos = mais otimizações.
-p filenamePrefixo do nome do arquivo para o arquivo de saída.
-r[name]Escrever relatório de referência cruzada no arquivo de teste (nome) ou em relação ao nome de entrada.
-S valueTamanho do stack/heap em células.
-s valueNúmero de linhas antes de pular para primeira palavra (padrão = 0 = pular nenhuma linha).
-t valueTAB: número de caracteres de espaço por tabulação (usado pelo aviso de indentação frouxa). Por padrão, tabulações têm comprimento 8.
-V valuenível de verbosidade: 0 = silencioso, 1 = avisos normais, 2 = avisos.
-v[+/-]habilita/desabilita avisos adicionais de status.
-w number [+/-]Habilita/desabilita um aviso específico pelo número. Veja também #pragma warning.
-X valueTamanho da máquina abstrata; se zero, haverá apenas verificações de tempo de execução.
-XD valueTamanho do segmento de dados abstrato.
-\Usa "\" em caminhos ao invés de "/".
-^Usa "^" ao invés de "\" como caractere de escape para strings.
-;[+/-]Exigir ou não ponto e vírgula para terminar cada instrução.
-([+/-]Exigir ou não parênteses em torno dos argumentos de retorno e sizeof.
símbolo=valorDefine uma constante, equivalente à diretiva #define, como um parâmetro de linha de comando.

Veja a opção "-c" e a página 119 para páginas de código. O padrão do compilador é pegar o nome de saída do nome do "arquivo de entrada" mas com uma extensão diferente. O compilador também exibe estatísticas após uma compilação bem-sucedida.

Quando executada sem nenhum argumento, a ajuda do compilador será exibida.

Opções de linguagem

A linguagem PAWN foi projetada para ser utilizada junto com outros sistemas e permite algumas variações na sintaxe, que possuem um comportamento padrão, mas que podem ser alterados por uma diretiva ou opção de linha de comando:

  • O ponto e vírgula para encerrar instruções é opcional; a opção/diretiva pode tornar ponto e vírgula obrigatórios ou pode desabilitá-los completamente.

  • As palavras-chaves "return" e "sizeof" também podem funcionar sem parênteses (os parênteses seriam apenas parte da expressão); uma opção/diretiva pode forçar parênteses obrigatórios.

Variáveis de ambiente

O compilador PAWN pode usar várias variáveis de ambiente.

VariávelSignificado
PAWNCCMantém opções de linha de comando adicionais
INCLUDEMantém caminho(s) para diretórios de include adicionais (múltiplos caminhos são separados por ";")

Sintaxe alternativa para funções públicas

Em vez de public, você pode usar o prefixo "@" para indicar que uma função é pública:

Listagem: declaração de função pública alternativa

@minhafunçãopública()
{
// ...
}

Esta sintaxe é particularmente comum para callbacks de eventos, onde pode ser usada com parâmetros opcionais e valores padrão como em @nomedoevento(arg1, args2=0).

Definindo constantes na linha de comando

Para definir a constante DEBUG como 1, use:

pawncc meuscript.pwn DEBUG=1

Se o valor for omitido, a constante será definida como 1 automaticamente:

pawncc meuscript.pwn DEBUG

Opção de sufixo do compilador

Use a opção -o para especificar um prefixo diferente para o arquivo de saída:

pawncc meuscript.pwn -o:meuscript_compilado

Diretório include padrão

O compilador pesquisa diretórios include na seguinte ordem:

  1. Diretório atual onde o arquivo de origem está
  2. Diretórios especificados em -i na linha de comando
  3. Diretórios especificados na variável de ambiente INCLUDE
  4. Diretório "include" relativo ao diretório onde o compilador está instalado

Instruções e diretivas para o montador

Instruções e diretivas completam o conjunto de "instruções de montagem" que o montador e desmontador usam. O conjunto de instruções da máquina abstrata do PAWN é de nível relativamente alto, mas ainda requer diretivas para ajustar a tradução.

Para mais informações sobre a máquina abstrata e as instruções, veja o documento Implementer's Guide.


Sugestões de documentação

EtiquetaSignificado
@authorAutor da função.
@dateData de criação ou última modificação.
@noteUma nota ou aviso sobre o uso da função.
@paramDescrição de um parâmetro da função.
@returnDescrição do valor de retorno da função.
@seeReferência cruzada para outra função ou tópico relacionado.
@sinceVersão em que a função foi introduzida.
@versionVersão atual da função.

Licença

PAWN incorpora ideias de uma série de linguagens, mas o projeto original foi influenciado pelo Small-C de Ron Cain & James Hendrix, e o Compilador de C por SubC de Nils Holm.


Voltar ao Índice