AVISOS - Avaliação em Época Normal
|
Esclarecimento de dúvidas:
- Consultar sempre o corpo docente atempadamente: presencialmente ou através do endereço oficial da disciplina [1].
- Não utilizar fontes de informação não oficialmente associadas ao corpo docente (podem colocar em causa a aprovação à disciplina).
- Não são aceites justificações para violações destes conselhos: quaisquer consequências nefastas são da responsabilidade do aluno.
|
Requisitos para desenvolvimento, material de apoio e actualizações do enunciado (ver informação completa em Projecto de Compiladores):
- O material de apoio é de uso obrigatório e não pode ser alterado.
- Verificar atempadamente (mínimo de 48 horas antes do final de cada prazo) os requisitos exigidos pelo processo de desenvolvimento.
|
Processo de avaliação (ver informação completa em Avaliação do Projecto):
- Datas: 2015/03/25 12:00 (inicial); 2015/04/14 12:00 (intercalar); 2015/05/20 12:00 (final); 2015/05/20-2015/05/27 (teste prático).
- Todas as entregas são cruciais para o bom desenvolvimento do projecto, sendo obrigatórias: a não realização de uma entrega implica a exclusão da avaliação do projecto e, por consequência, da avaliação da disciplina.
- Verificar atempadamente (até 48 horas antes do final de cada prazo) os requisitos exigidos pelo processo de avaliação, incluindo a capacidade de acesso ao repositório.
- Apenas se consideram para avaliação os projectos existentes no repositório oficial. Apenas se considera para avaliação o ramo 'main'.
- Trabalhos não presentes no repositório no final do prazo têm classificação 0 (zero) (não são aceites outras formas de entrega). Não são admitidas justificações para atrasos em sincronizações do repositório. A indisponibilidade temporária do repositório, desde que inferior a 24 horas, não justifica atrasos na submissão de um trabalho.
- A avaliação do projecto pressupõe o compromisso de honra de que o trabalho correspondente foi realizado pelos alunos correspondentes ao grupo de avaliação.
- Fraudes na execução do projecto terão como resultado a exclusão dos alunos implicados do processo de avaliação em curso.
|
A linguagem pwn é uma linguagem imperativa e é apresentada de forma intuitiva neste manual. São apresentadas características básicas da linguagem (tipos de dados, manipulação de nomes); convenções lexicais; estrutura/sintaxe; especificação das funções; semântica das instruções; semântica das expressões; e, finalmente, alguns exemplos.
Tipos de Dados
A linguagem é fracamente tipificada (são efectuadas algumas conversões implícitas). Existem 4 tipos de dados, todos compatíveis com a linguagem C, e com alinhamento em memória sempre a 32 bits:
- Tipos numéricos: os inteiros, em complemento para dois, ocupam 4 bytes; os reais, em vírgula flutuante, ocupam 8 bytes.
- As cadeias de caracteres são vectores de caracteres terminados por ASCII NULL (0x00, \0). Variáveis e literais deste tipo só podem ser utilizados em atribuições, impressões, ou como argumentos/retornos de funções.
- Os ponteiros representam endereços de números reais e ocupam 4 bytes. Podem ser objecto de operações aritméticas (deslocamentos) e permitem aceder ao valor apontado.
Os tipos suportados por cada operador e a operação a realizar são indicados na definição das expressões.
Manipulação de Nomes
Os nomes (identificadores) correspondem a constantes, variáveis e funções. Nos pontos que se seguem, usa-se o termo entidade para as designar indiscriminadamente, usando-se explicitando-se quando a descrição for válida apenas para um subconjunto.
Espaço de nomes e visibilidade dos identificadores
O espaço de nomes global é único, pelo que um nome utilizado para designar uma entidade num dado contexto não pode ser utilizado para designar outras (ainda que de natureza diferente).
Os identificadores são visíveis desde a declaração até ao fim do alcance: ficheiro (globais) ou função (locais). A reutilização de identificadores em contextos inferiores encobre declarações em contextos superiores: redeclarações locais podem encobrir as globais até ao fim de uma função. É possível utilizar símbolos globais nos contextos das funções, mas não é possível defini-los (ver símbolos globais).
Validade das variáveis
As entidades globais (declaradas fora de qualquer função), existem durante toda a execução do programa. As contantes e variáveis locais a uma função existem apenas durante a sua execução. Os argumentos formais são válidos enquanto a função está activa.
Convenções Lexicais
Para cada grupo de elementos lexicais (tokens), considera-se a maior sequência de caracteres constituindo um elemento válido.
Caracteres brancos
São considerados separadores e não representam nenhum elemento lexical: mudança de linha ASCII LF (0x0A, \n), recuo do carreto ASCII CR (0x0D, \r), espaço ASCII SP (0x20, ) e tabulação horizontal ASCII HT (0x09, \t).
Comentários
Existem dois tipos de comentários, que também funcionam como elementos separadores:
- explicativos -- começam com // e acabam no fim da linha; e
- operacionais -- começam com /* e terminam com */, podendo estar aninhados.
Se as sequências de início fizerem parte de uma cadeia de caracteres, não iniciam um comentário (ver definição das cadeias de caracteres).
Palavras chave
Estas palavras são reservadas e não constituem identificadores:
Tipos
Os seguintes elementos lexicais designam tipos em declarações (ver gramática):
Operadores de expressões
São considerados operadores os elementos lexicais apresentados na definição das expressões.
Delimitadores e terminadores
Identificadores (nomes)
Literais
Inteiros
Reais em vírgula flutuante
Cadeias de caracteres
Ponteiros
Gramática
Tipos, identificadores, literais e definição de expressões
Left-values
Ficheiros
Declaração de variáveis e constantes
Variáveis
Constantes
Símbolos globais
Inicialização
Funções
Declaração
Invocação
Corpo
Função principal e execução de programas
Intruções
Blocos
Instrução condicional
Instrução de iteração
Instrução de terminação
Instrução de continuação
Instrução de retorno
Expressões como instruções e operações de impressão
Expressões
Expressões primitivas
Identificadores
Leitura
Parênteses curvos
Expressões resultantes de avaliação de operadores
Indexação
Identidade e simétrico
Reserva de memória
Expressão de indicação de posição
Exemplos
Os exemplos não são exaustivos e não ilustram todos os aspectos da linguagem. Podem obter-se outros na página da disciplina.
Factorial
Exemplo da definição de função num ficheiro (ficheiro factorial.pwn):
(---)
Programa com vários módulos
Exemplo da utilização da função noutro ficheiro (ficheiro main.pwn):
(---)
Omissões e Erros
Casos omissos e erros serão corrigidos em futuras versões do manual de referência.