Compiladores/Pautas 2017-2018/Pauta do Projecto: Entrega "zero"

From Wiki**3

< Compiladores‎ | Pautas 2017-2018
Revision as of 16:07, 7 April 2018 by Root (talk | contribs) (→‎Pauta)
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: 2018/03/23 17:00 (inicial); 2018/04/20 17:00 (intercalar); 2018/05/21 17:00 (final); 2018/05/21-2018/05/25 (teste prático).
  • A entrega inicial, sendo crucial para o projecto, é obrigatória e sua não realização 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 CVS.
  • Apenas se consideram para avaliação os projectos existentes no repositório CVS oficial.
  • 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.
Material de Uso Obrigatório
As bibliotecas CDK e RTS de apoio ao desenvolvimento do projecto são de uso obrigatório:
A máquina virtual, fornecida para desenvolvimento do projecto, já contém todo o material de apoio.
Uso Obrigatório: Repositório CVS
Apenas se consideram para avaliação os projectos existentes no repositório CVS oficial.

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.

Prazo de Revisão

Os resultados da entrega inicial podem ser revistos, nos horários de dúvidas, até à data da entrega intermédia.

Critérios de Avaliação

LER COM ATENÇÃO

A avaliação é realizada sobre a versão existente no CVS no final do prazo para a entrega inicial. Projectos que não apresentem alterações relativamente ao conteúdo inicial do repositório CVS não serão considerados.

Considerando que é um passo crucial na concepção do projecto, a não realização desta entrega conduz automaticamente a uma classificação de 0 (zero) na componente de avaliação relativa ao Projecto e consequente exclusão da avaliação da disciplina no ano lectivo actual.

A entrega "zero" vale 2 valores em 20.

A avaliação da entrega inicial considera a execução de intervenções em duas regiões do código do compilador em desenvolvimento, assim como a gestão do projecto correspondente.

Advertem-se os alunos sobre a consulta de colegas de anos anteriores. Estas consultas podem ser positivas, mas comportam algum risco, pois o processo e critérios de avaliação podem ter mudado. Além disso, a proficiência do colega pode majorar negativamente o resultado da avaliação em curso. Não são admitidas quaisquer justificações com base na história da disciplina.

Estas condições são aplicáveis à data da entrega inicial.

Em caso de dúvidas suscitadas por qualquer elemento neste texto, no projecto, ou na disciplina em geral, os alunos são fortemente encorajados a consultar o corpo docente.

VALORAÇÕES

Existem 2 valores (dos 20 disponíveis para o projecto) associados a esta entrega:

  • gestão do projecto: 0.5 valores
    • projecto com a estrutura correcta no repositório CVS: 0.25 valores (i.e., código que não apresente a estrutura canónica de um compilador desenvolvido com a CDK é considerado sem a estrutura correcta -- consultar estas páginas sobre o desenvolvimento do projecto com base no repositório CVS)
    • projecto compila e produz compilador "xpl" ("xpl", com letras minúsculas: variações correspondem a "não compilação"): 0.25 valores

Se o projecto compilar, poderão ser atribuídos mais 1.5 valores (desenvolvimento do compilador), distribuídos como se segue:

  • Classes dos nós do compilador (completo): 1.0 valores
    • Reutilização dos nós da CDK (simples ajuste do Simple)
    • Definição ou extensão de elementos existentes (simples ajuste do Simple)
    • Definição de novas declarações/definições (variáveis/funções) (completo)
    • Definição de novas instruções (completo)
    • Definição de novas expressões (completo)
    • Definição de outros elementos (completo)
    • Sugere-se (por simplicidade de gestão do código) a separação das várias classes de nós em namespaces coerentes (à la Simple)
    • Não é necessário criar as regras no BYACC para criar os nós (se for feito, é conveniente para o progresso do projecto, mas não é avaliado nesta entrega)
  • Métodos dos "visitors" (completo): 0.5 valores
    • Reutilização de métodos já definidos (simples ajuste do Simple)
    • Definição de todos os métodos do_X (correspondentes ao nó da class X) em todos os visitors (simples extensão do Simple)
    • Métodos novos podem estar vazios, mas devem existir
    • Métodos correspondentes a acções semelhantes às existentes devem ser modelados nos existentes (exemplo, do_program_node -> do_function_definition_node) (mesmo que não modificados numa primeira instância)
    • A presença de implementações de semântica no postfix_writer (tabela de símbolos, validação de tipos, etc.) não é penalizada, mas não será avaliada nesta entrega
PENALIZAÇÕES

Existem penalizações relativas à (deficiente) execução do projecto.

São considerados os seguintes aspectos preliminares:

  1. A linguagem do projecto contém a linguagem Simple, pelo que não há razão para não utilizar completamente o compilador Simple, eventualmente com pequenas alterações.
  2. A semântica da linguagem do projecto contém a da linguagem Simple, pelo que a implementação de alguns aspectos da linguagem do projecto não requer qualquer reimplementação relativamente ao Simple.
  • O compilador Simple foi fornecido completamente funcional, assim como a versão inicial do compilador do projecto no respositório CVS (igual ao Simple e apenas alterado, para ter um nome apropriado).
  • A criação de novos nós não apresenta quaisquer dificuldades (são classes muito simples).
  • Os métodos (na sua maioria, vazios) dos "visitors" são simples paralelos com as classes dos nós e os que não estão vazios são quase 100% reutilizáveis na nova linguagem.
  • O compilador é obrigatoriamente desenvolvido em C++, fazendo-se uso do material de apoio.

Considerando os aspectos 1. a 6., são aplicadas as seguintes penalizações:

  • Destruição de funcionalidade do compilador Simple sem substituição por funcionalidade equivalente do compilador do projecto: 2 valores
  • Utilização de funções e estruturas C, quando existem alternativas directas C++ (malloc em lugar de new, por exemplo; strcmp, etc. em lugar da classe std::string; e outras): penalização máxima de 1 valor
  • Não utilização de qualquer material obrigatório ou não satisfação dos critérios mínimos: 2 valores e considera-se entrega não realizada (implica exclusão da avaliação)

Legenda

Os alunos são encorajados a compreender/verificar/corrigir os problemas reportados, especialmente nos casos em que exista anotação explícita na pauta.

Anotações da tabela
  • dups: cópia de código que já está disponível na CDK (não devem existir estar cópias: devem ser usadas as classes da CDK)
  • program node: o program_node não existe (devia ser function_definition_node ou semelhante)
  • pointer node: estes nós não existem
  • lvals: faltam nós correspondentes a alguns left-values ou têm problemas (um left-value é uma entidade que pode estar do lado esquerdo de uma atribuição)
  • index: problemas com o nó de indexação (e.g. não é um lvalue, faltam expressões)
  • decls: faltam nós correspondentes a declarações ou têm problemas (e.g. confundidas com expressões, problemas com tipos, etc.)
  • funcs: faltam nós correspondentes a funções ou têm problemas: e.g. faltam tipos, têm relações com lvalues (não devem existir)
  • vars: faltam nós correspondentes a declarações/definições de variáveis ou têm problemas: e.g. faltam tipos, têm relações com lvalues (não devem existir)
  • exprs: faltam expressões (tipicamente, faltam operadores, chamadas a funções)
  • file/public/use/qualifier: nós que não devem existir
  • read_node: é uma expressão e não uma instrução; ao contário do que acontece no Simple, não tem um left-value associado
  • call_node: este nó tem de ser uma expressão que tem como atributos o nome de uma função e uma sequência de argumentos
  • alloc_node: este nó tem de ser uma expressão unária (qualquer outra versão está errada)
  • address_of_node: este nó é uma expressão aplicável a um left-value (tem várias implementações possíveis)
  • types: não foi usada a estrutura basic_type da CDK para representar os tipos de dados da linguagem
  • [outras anotações específicas]: contactar o professor responsável

Pauta

PAUTA EM ACTUALIZAÇÃO

<runphp> echo<<<___EOT___

<colgroup width="71"></colgroup> <colgroup span="2" width="43"></colgroup> <colgroup width="48"></colgroup> <colgroup width="108"></colgroup> <colgroup width="48"></colgroup> <colgroup width="108"></colgroup> <colgroup width="48"></colgroup> <colgroup span="3" width="125"></colgroup> <colgroup width="148"></colgroup> <tbody> </tbody>
  Nota Total CVS Compilação <a href="https://goo.gl/hPRZ4n">https://goo.gl/hPRZ4n</a> Nós, Métodos de Visita Obs.
Número 2.00 2.00 0.25 Problemas 0.25 Problemas 1.50 Problemas (a mais) (a menos)
001 0.25 0.25 1.00   0.00 (corrigido)   read, if, if_else program, assignment null  
002 0.50 0.50 1.00   1.00     read, again, stop, block symmetric    
003 0.50 0.50 1.00   1.00     again, stop, return      
004 0.50 0.50 1.00   1.00       float block, null  
005 0.50 0.50 1.00   1.00     read, print, again, stop, return program, while, print null  
006 0.50 0.50 1.00   1.00     read while null  
007 0.50 0.50 1.00   1.00     read, print program, while, print, assignment again, stop, return, block, null  
008    
009 0.50 0.50 1.00   1.00     stop, lvals, return   print, again  
010 0.50 0.50 1.00   1.00            
011 0.50 0.50 1.00   1.00     read, again, stop program, while, print, assignment, symmetric, modulus null  
012 0.50 0.50 1.00   1.00            
013 0.50 0.50 1.00   1.00     read, again, stop, return     nomenc, again, stop
014 0.50 0.50 1.00   1.00     if, if_else      
015 0.50 0.50 1.00   1.00     read      
016 0.50 0.50 1.00   1.00       symmetric    
017 0.50 0.50 1.00   1.00     read, again, stop, return, block while, assignment print, null  
018 0.50 0.50 1.00   1.00     read while print, null  
019 0.50 0.50 1.00   1.00     again, stop elsif, assignment    
020 0.50 0.50 1.00   1.00     read, again, stop   block, null  
021 0.50 0.50 1.00   1.00     (if), (if_else)      
022 0.50 0.50 1.00   1.00     read program, while, symmetric null  
023 0.25 0.25 1.00   0.00 não compila   read, print, again, stop, return program, while, print, elsif block, null  
024 0.50 0.50 1.00   1.00     null (return_nil)    
025 0.50 0.50 1.00   1.00     read      
026 0.50 0.50 1.00   1.00         print  
027 0.50 0.50 1.00 .git 1.00     read, again, stop, return program, while, next print  
028 0.50 0.50 1.00   1.00     read, again, stop, return while, symmetric print  
029 0.50 0.50 1.00   1.00     read, null   print nomenc, again, stop
030 0.50 0.50 1.00   1.00     read, again, stop while    
031 0.50 0.50 1.00   1.00     read, if_else, null program, assignment, fake, do, initially, use again, stop, block nil extension
032 0.50 0.50 1.00   1.00     read, return symmetric null nomenc, signal
033 0.50 0.50 1.00   1.00            
034 0.50 0.50 1.00   1.00     again, stop, return program null  
035 0.50 0.50 1.00   1.00     read, print   null  
036 0.25 0.25 1.00   0.00 (corrigido)   read, print, again, stop parentheses    
037 0.50 0.50 1.00   1.00            
038    
039 0.50 0.50 1.00   1.00     again, stop, return, null while, do, use_for print nomenc, call
040 0.50 0.50 1.00   1.00            
041 0.50 0.50 1.00   1.00     read, again, stop, return program, while print, null nomenc, body
042 0.25 0.25 1.00   0.00 (corrigido)   read, again, stop, return symmetric null nomenc, again, stop
043    
044 0.50 0.50 1.00   1.00     read   null  
045 0.50 0.50 1.00   1.00     read program, while null  
046 0.50 0.50 1.00   1.00     read, if, if_else, again, null assignment    
047 0.50 0.50 1.00   1.00            
048 0.50 0.50 1.00   1.00     read, again, stop, return   null  
049 0.50 0.50 1.00   1.00     read, again, stop, null program, while print, block basic extension
050 0.50 0.50 1.00   1.00     read, return      
051 0.50 0.50 1.00   1.00     read, print program null  
052 0.50 0.50 1.00   1.00     read, again, stop, return program, while    
053 0.50 0.50 1.00   1.00     read, again, stop, return program, while null  
054 0.50 0.50 1.00   1.00            
055 0.50 0.50 1.00   1.00     again, stop, return   null  
056 0.50 0.50 1.00   1.00     read, again, stop, return      
057 0.50 0.50 1.00   1.00            
058 0.50 0.50 1.00   1.00     read program    
059 0.50 0.50 1.00   1.00     read, nilptr     nomenc, null
060 0.50 0.50 1.00   1.00     read, null assignment   basic extension
061 0.50 0.50 1.00   1.00       program    
062 0.50 0.50 1.00   1.00     read program, while, print, symmetric null  
063 0.50 0.50 1.00   1.00     read symmetric print, null  
064 0.50 0.50 1.00   1.00     read assignment null  
065 0.50 0.50 1.00   1.00     read, again, stop, return, null program, while, print, elsif, file   basic extension
066 0.50 0.50 1.00   1.00     read, pointer program, while, print, assignment, pointer null  
067 0.50 0.50 1.00   1.00     read, again, stop, return program, while, print block, null  
068 0.50 0.50 1.00   1.00     return      
069 0.50 0.50 1.00   1.00     read, again, stop, return      
070 0.50 0.50 1.00   1.00     again, stop   print nomenc, again, stop
071 0.50 0.50 1.00   1.00            
072 0.25 0.25 1.00   0.00 (corrigido)   return, again, stop program block, null nomenc, again, stop
073 0.50 0.50 1.00   1.00     read, (if), (if_else)      
074 0.50 0.50 1.00   1.00     read, again, stop, return while, assignment print  
075 0.50 0.50 1.00   1.00     read, return   print, null  
076 0.50 0.50 1.00   1.00     read, again, stop, return program, while, symmetric print, null  
077 0.50 0.50 1.00   1.00           nomenc, again, stop
078 0.50 0.50 1.00   1.00            
079 0.50 0.50 1.00   1.00     again, stop, return      
080 0.50 0.50 1.00   1.00     read, null      
081 0.50 0.50 1.00   1.00     if, if_else, again, stop, return, null   print basic extension
082 0.50 0.50 1.00   1.00     read, print program null  
083 0.50 0.50 1.00   1.00     read, again, stop, return assignment    
084 0.50 0.50 1.00   1.00     if, if_else     nomenc, again, stop
085    
086 0.25 0.25 1.00   0.00 (corrigido)   read, again, stop, return program, while, symmetric print, null  
087 0.50 0.50 1.00   1.00     read   null  
088 0.50 0.50 1.00   1.00     read, again, stop      
089 0.19 0.19 0.75 post_node 0.00 não compila   (incomp)   print, again, stop, return, block, null  
090 0.50 0.50 1.00   1.00     block   null  
091 0.50 0.50 1.00   1.00     again, stop      
092 0.50 0.50 1.00   1.00     stop, return, null print   basic extension
093 0.25 0.25 1.00   0.00 não compila   (incomp), again, stop, lvals, return   print, block, null  
094 0.50 0.50 1.00   1.00     read, again, stop program, elsif, symmetric null  
095 0.50 0.50 1.00   1.00     read assignment    
096 0.50 0.50 1.00   1.00     read, return, null      
097 0.50 0.50 1.00   1.00     read, program, while, again, stop, lvals, return program, while print, null  
098 0.50 0.50 1.00   1.00     read while null  
099 0.50 0.50 1.00   1.00     read symmetric null  
100 NA sem entrega inicial
101 0.50 0.50 1.00   1.00            
102 0.50 0.50 1.00   1.00     read, return program, while, assignment, symmetric null  
103 0.50 0.50 1.00   1.00     null while   basic extension
104 0.50 0.50 1.00   1.00     read program, while print, null  
105 0.50 0.50 1.00   1.00     read, return program, while, symmetric, do, use_for null nomenc, call
106 0.50 0.50 1.00   1.00     if, if_else      
107 0.50 0.50 1.00   1.00     read, return while print, null  
108 0.50 0.50 1.00   1.00     read, return   print  
109 0.50 0.50 1.00   1.00     read, again, stop elsif null  
110 0.50 0.50 1.00   1.00     read while null  
111 0.50 0.50 1.00   1.00     read, again, stop, return program, while, print null nomenc, again, stop, body
112 NA sem entrega inicial
113 0.25 0.25 1.00   0.00 não compila   read, again, stop, return program, assignment    
114 0.50 0.50 1.00   1.00     read, again, stop, null     basic extension
115 0.25 0.25 1.00   0.00 não compila   read, (print), again, stop program, while, covfefe block, null  
116 0.50 0.50 1.00   1.00     read, again, stop, return      
117 0.50 0.50 1.00   1.00     again, stop, lvals   evaluation, read, print, null  
118 0.50 0.50 1.00   1.00     read, print, again, stop, return program, while, print, symmetric null  
119 0.25 0.25 1.00   0.00 não compila   (incomp), print   again, stop, return, block, null  
120 NA sem entrega inicial
121 0.50 0.50 1.00   1.00            
122 0.50 0.50 1.00   1.00     read, block, null program, while, print, qualifier, external, do, float, public   basic extension
123 0.50 0.50 1.00   1.00     read, again, stop   null  
124 NA sem entrega inicial
125 0.50 0.50 1.00   1.00     read, again, stop, return program, while, assignment print  
126 0.50 0.50 1.00   1.00     read, return program, while null  
127 0.50 0.50 1.00   1.00         null  
128 0.50 0.50 1.00   1.00     read, return      
129 0.50 0.50 1.00   1.00     read, print, return program, assignment null  
130 0.50 0.50 1.00   1.00     read, again, stop program, assignment   nomenc, repetition
131 0.50 0.50 1.00   1.00     read, again, stop, return, null symmetric, initially identity nomenc, signal
132 0.50 0.50 1.00   1.00     read, again, stop program, symmetric    
133 0.50 0.50 1.00   1.00     read, again, stop, return while print, block, null  
134 0.50 0.50 1.00   1.00     again, stop, return program, while    
135 0.25 0.25 1.00   0.00 (corrigido)   read program, while, qualifier print, block, null  
136 0.50 0.50 1.00   1.00     again, stop      
137 0.50 0.50 1.00   1.00            
138 0.50 0.50 1.00   1.00     read, print, again, stop while block, null  
139 0.50 0.50 1.00   1.00     read, again, stop, return, null program, while, assignment, symmetric    
140 0.50 0.50 1.00   1.00     read, again, stop program, while, print, elsif, assignment, symmetric, subtraction null  
141 NA sem entrega inicial
142 0.25 0.25 1.00   0.00 não compila   read, again, stop, return program, elsif, assignment null  
143 0.50 0.50 1.00   1.00     return while, parentheses block, null  
144 0.50 0.50 1.00   1.00     read program, while print, null  
145 0.50 0.50 1.00   1.00     read   print nomenc, again, stop
146 0.50 0.50 1.00   1.00     read, return, block, pointer program, while, float, pointer null  
147 0.25 0.25 1.00   0.00 não compila   read, again, stop program, while, print, elsif, assignment, initially, public, use block, null nomenc, files
148 0.50 0.50 1.00   1.00            
149 0.50 0.50 1.00   1.00         block, null  
150 0.50 0.50 1.00   1.00     read parentheses print, null nomenc, again, stop
151 0.50 0.50 1.00   1.00     read, print pointer print, null  
152 0.25 0.25 1.00   0.00 não compila   read, return program, while, print, assignment null  
153 0.50 0.50 1.00   1.00     read, (print) parentheses null  
154 0.50 0.50 1.00 .directory 1.00     while, null     basic extension
155 0.25 0.25 1.00   0.00 (corrigido)   read, again, stop symmetric null  
156 NA sem entrega inicial
157 0.50 0.50 1.00   1.00     read, again, stop, return while, elsif, assignment block, null  
158 NA sem entrega inicial
159 NA sem entrega inicial
160 NA sem entrega inicial
161 0.50 0.50 1.00   1.00     read, print, return   null  
162 NA sem entrega inicial

___EOT___; </runphp>