Compiladores/Pautas 2015-2016/Pauta do Projecto: Entrega "zero"

From Wiki**3

< Compiladores‎ | Pautas 2015-2016
Revision as of 10:15, 24 March 2016 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: 2016/03/18 17:00 (inicial); 2016/04/15 17:00 (intercalar); 2016/05/20 17:00 (final); 2016/05/20-2016/05/27 (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

PAUTA EM ACTUALIZAÇÃ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 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.

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 2015/2016.

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 "zu" ("zu", 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

RELATIVAMENTE A NÃO COMPILAR

A existência do nó identifier_node em alguns compiladores foi manualmente validada e os projectos correspondentes foram testados novamente. As outras situações de não compilação correspondem a problemas de programação ou de ausência de código (e, num caso, correspondem a duplicação inválida de código da CDK). Todos os problemas de compilação podem e devem ser resolvidos (perdendo-se 0.25 pontos, relativos à componente de compilação).

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)
  • while node, 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)
  • 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)
  • decls: faltam nós correspondentes a declarações ou têm problemas (e.g. confundidas com expressões, problemas com tipos, etc.)
  • exprs: faltam expressões (tipicamente, faltam operadores, chamadas a funções)
  • file/const/import/local: nós que não devem existir
  • 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="44"></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 width="215"></colgroup> <colgroup span="2" width="48"></colgroup> <colgroup width="111"></colgroup> <colgroup width="174"></colgroup> <tbody> </tbody>
  Nota Total Pontos Positivos Pontos Negativos Obs.
  CVS Compilação Nós, Métodos de Visita Simple Bad code
Grupo 2.00 2.00 0.25 Problemas 0.25 Problemas 1.50 Problemas 4.00 1.00 Problemas
001 0.50 0.50 1.00   1.00              
002 0.50 0.50 1.00   1.00              
003 0.50 0.50 1.00   1.00              
004 0.50 0.50 1.00   1.00     dups, real_node        
005 0.50 0.50 1.00   1.00     id_node, lvals        
006 0.50 0.50 1.00   1.00     decls, lvalue_declaration_node        
007 0.50 0.50 1.00   1.00     decls, external_declaration_node        
008 0.25 0.25 1.00   0.00 (cvs ok)   while_node, lvals, pointer_node, float_node, precedence_node, primary_expression_node, dups        
009 0.44 0.44 0.75 lixo no repositório 1.00              
010 0.50 0.50 1.00   1.00     id_node, lvals        
011 0.50 0.50 1.00   1.00              
012 0.50 0.50 1.00   1.00     program_node, while_node, decls, import_node        
013 0.50 0.50 1.00   1.00              
014 0.50 0.50 1.00   1.00     program_node        
015 0.50 0.50 1.00   1.00     pointer node, priority_node        
016 0.50 0.50 1.00   1.00              
017 0.50 0.50 1.00 README.md 1.00     lvals, pointer_node        
018 0.50 0.50 1.00   1.00     while_node, zuidentifier_node, lvals        
019 0.50 0.50 1.00   1.00     while_node, zuidentifier_node, lvals        
020 0.25 0.25 1.00   0.00 (cvs ok)   priority_node, lvals, id_node        
021 0.50 0.50 1.00   1.00     program_node, while_node, pointer_node, decls, extDefinition_node, global_node        
022 0.50 0.50 1.00   1.00     parentheses_node, primary_expression_node, brakets_node        
023 0.50 0.50 1.00   1.00     lvals, parenthesis_node        
024 0.50 0.50 1.00   1.00              
025 0.50 0.50 1.00   1.00     id_node, lvals        
026 0.50 0.50 1.00   1.00              
027 0.50 0.50 1.00   1.00     lvals        
028 0.25 0.25 1.00   0.00 não compila, ast, targets   missing nodes, program_node, while_node       contactar prof responsável
029 0.50 0.50 1.00   1.00              
030 0.25 0.25 1.00   0.00 (cvs ok)   nullptr        
031 0.50 0.50 1.00   1.00     program_node, pointer_node        
032 0.50 0.50 1.00   1.00     lvals, identifier_lvalue_node        
033 0.50 0.50 1.00   1.00     pointer_node        
034 0.50 0.50 1.00   1.00              
035 0.50 0.50 1.00   1.00              
036 0.50 0.50 1.00   1.00              
037 0.50 0.50 1.00   1.00     lvals, return_zero_node        
038 0.50 0.50 1.00   1.00              
039 0.50 0.50 1.00   1.00     program_node, while_node, lvals, dups, pointer_node, float_node, comment_node        
040 0.25 0.25 1.00   0.00 não compila, ast   missing nodes, program_node       contactar prof responsável
041 0.50 0.50 1.00   1.00              
042 0.50 0.50 1.00   1.00     leftval_node, lvals        
043 0.50 0.50 1.00   1.00              
044 0.50 0.50 1.00   1.00     lvals        
045 0.25 0.25 1.00   0.00 não compila, ast   ident_node, lvals       contactar prof responsável
046 0.50 0.50 1.00 TODO 1.00     program_node, dups, pointer_node, real_node        
047 0.50 0.50 1.00   1.00              
048 0.50 0.50 1.00   1.00              
049 0.50 0.50 1.00   1.00     exclamation_node, dups, identify_node, lvals        
050 0.50 0.50 1.00   1.00     lvals        
051 0.50 0.50 1.00   1.00              
052 0.50 0.50 1.00   1.00              
053 0.50 0.50 1.00   1.00     comma_node, exit_node        
054 0.50 0.50 1.00   1.00     id_node, lvals        
055 0.50 0.50 1.00   1.00     pointer node, float_node, dups        
056 0.50 0.50 1.00   1.00     identifier_l_node, lvals        
057 0.50 0.50 1.00   1.00              
058 0.50 0.50 1.00   1.00     lvals        
059 0.50 0.50 1.00   1.00     lvals        
060 0.50 0.50 1.00   1.00     curved_brackets_node        
061 0.50 0.50 1.00   1.00              
062 0.50 0.50 1.00   1.00              
063 0.50 0.50 1.00   1.00     program_node, pointer_node        
064 0.50 0.50 1.00   1.00              
065 0.50 0.50 1.00   1.00     name_identifier_node, lvals        
066 0.50 0.50 1.00   1.00     program_node, body_node        
067 NA sem entrega inicial
068 NA sem entrega inicial
069 0.25 0.25 1.00   0.00 não compila, ast, targets   program_node, missing nodes, bad names       contactar prof responsável
070 0.50 0.50 1.00   1.00     program_node, while_node, pointer_node       pointers_node??
071 0.25 0.25 1.00   0.00 não compila, ast   missing nodes, pub_dec_node, priv_dec_node, decls, extern_dec_node, id_node, lvals       contactar prof responsável
072 0.50 0.50 1.00   1.00     while_node, zu_identifier_node, lvals        
073 0.50 0.50 1.00   1.00     lvals        
074 0.50 0.50 1.00   1.00     program_node, while_node, id_node, lvals        
075 0.50 0.50 1.00   1.00              
076 0.50 0.50 1.00   1.00              
077 0.50 0.50 1.00   1.00              
078 0.50 0.50 1.00   1.00     file_node, lvals, pointer_node, curve_parentheses_node        
079 0.50 0.50 1.00   1.00     program_node, while_node, file_node        
080 0.50 0.50 1.00   1.00     lvals        
081 0.25 0.25 1.00   0.00 não compila, ast           contactar prof responsável
082 0.50 0.50 1.00   1.00     program_node        
083 0.50 0.50 1.00   1.00     suffix_node        
084 0.50 0.50 1.00   1.00              
085 0.50 0.50 1.00   1.00     lvals, expression_sequence_node        
086 NA sem entrega inicial
087 0.50 0.50 1.00   1.00     while_node, pointer_node        
088 0.50 0.50 1.00   1.00     id_node, leftvalue_node, lvals        
089 0.50 0.50 1.00   1.00     lvals        
090 0.50 0.50 1.00   1.00     zu_identifier_node, lvals, exprs        
091 0.44 0.44 0.75 lixo no repositório 1.00     identifier_l_node, lvals        
092 0.50 0.50 1.00   1.00              
093 0.50 0.50 1.00   1.00     lvals        
094 0.50 0.50 1.00   1.00     lvals, left_value_node        
095 0.50 0.50 1.00   1.00              
096 0.50 0.50 1.00   1.00              
097 0.50 0.50 1.00   1.00     id_node, lvals        
098 0.50 0.50 1.00   1.00     lvals        
099 0.50 0.50 1.00   1.00              
100 0.50 0.50 1.00   1.00     null_node (pointer node)        
101 0.50 0.50 1.00   1.00              
102 0.50 0.50 1.00   1.00     program_node        
103 0.50 0.50 1.00   1.00     lvals        
104 0.19 0.19 0.75 lixo no repositório 0.00 não compila, ast           contactar prof responsável
105 0.50 0.50 1.00   1.00              
106 0.50 0.50 1.00   1.00              
107 0.50 0.50 1.00   1.00     while_node, zu_identifier_node, lvals        
108 0.25 0.25 1.00   0.00 (cvs ok)   missing nodes        
109 0.50 0.50 1.00   1.00     program_node, lvals, pointer_node        
110 0.50 0.50 1.00   1.00     program_node        
111 0.50 0.50 1.00   1.00              
112 0.50 0.50 1.00   1.00     lvals        
113 0.50 0.50 1.00   1.00              
114 0.50 0.50 1.00   1.00              
115 0.44 0.44 0.75 lixo no repositório 1.00     lvals, decls, external_declaration_node        
116 0.50 0.50 1.00   1.00              
117 0.50 0.50 1.00   1.00     lvals        
118 0.50 0.50 1.00   1.00     while_node        
119 0.50 0.50 1.00   1.00              
120 0.50 0.50 1.00   1.00     program_node, while_node        
121 0.50 0.50 1.00   1.00     while_node, file_node        
122 0.50 0.50 1.00   1.00              
123 0.50 0.50 1.00   1.00              
124 0.50 0.50 1.00   1.00     file_node, lvals, pointer_node        
125   sem inscrição
126 0.50 0.50 1.00   1.00              
127 0.50 0.50 1.00   1.00              
128 0.25 0.25 1.00   0.00 não compila, ast           contactar prof responsável
129 0.50 0.50 1.00   1.00     lvals        
130 0.50 0.50 1.00   1.00     program_node, while_node        
131 0.25 0.25 1.00   0.00 (cvs ok)   while_node        
132 0.50 0.50 1.00   1.00              
133 NA sem entrega inicial
134 0.50 0.50 1.00   1.00     program_node, while_node, lvals, dups, real_node        
135 0.25 0.25 1.00   0.00 (cvs ok)   program_node        
136 0.50 0.50 1.00   1.00              
137 0.50 0.50 1.00   1.00              
138 0.50 0.50 1.00   1.00              
139 0.50 0.50 1.00   1.00     program_node        
140 0.50 0.50 1.00   1.00              
141 0.50 0.50 1.00   1.00     missing nodes, program_node, while_node        
142   sem inscrição
143 0.50 0.50 1.00   1.00             std::string*
144 0.50 0.50 1.00   1.00              
145 NA sem entrega inicial
146 0.44 0.44 0.75 lixo no repositório 1.00     program_node, while_node        
147 0.25 0.25 1.00   0.00 (cvs ok)   file_node, pointer_node        
148 0.50 0.50 1.00   1.00     program_node, while_node, pointer_node, public_node, private_node, zu_identifier_node, lvals        
149 0.50 0.50 1.00   1.00     program_node        
150 0.50 0.50 1.00   1.00     dups, real_node, curved_par_node        
151 0.50 0.50 1.00   1.00     program_node, while_node        
152 0.25 0.25 1.00   0.00 (cvs ok)            
153 0.50 0.50 1.00   1.00              
154 0.25 0.25 1.00   0.00 não compila, ast   program_node, while_node       contactar prof responsável
155 0.50 0.50 1.00   1.00     program_node, while_node, body_node        
156 0.50 0.50 1.00   1.00              
157 0.25 0.25 1.00   0.00 (cvs ok)   program_node, decls, export_node, import_node        
158 NA sem entrega inicial
159 NA sem entrega inicial
160 0.50 0.50 1.00   1.00              
161 0.25 0.25 1.00   0.00 (cvs ok)   lvals        
162 0.25 0.25 1.00   0.00 não compila, ast           contactar prof responsável
163 0.50 0.50 1.00   1.00              
164 0.50 0.50 1.00   1.00     my_identifier_node, lvals        
165 0.88 0.88 1.00   1.00   0.25 program_node, while_node, dups, markers, operators, etc., lvals, decls, funcs       contactar prof responsável
166   sem inscrição
167 0.50 0.50 1.00   1.00     program_node, while_node        
168 0.25 0.25 1.00   0.00 não compila, ast           contactar prof responsável
169 0.25 0.25 1.00   0.00 não compila, targets   program_node, while_node       contactar prof responsável
170 NA sem entrega inicial
171 0.25 0.25 1.00   0.00 não compila, ast, targets   missing nodes, program_node, while_node, dups (sequence, neg, real_node)       contactar prof responsável
172 0.25 0.25 1.00   0.00 não compila, targets   missing nodes, program_node, pointer_node       contactar prof responsável
173 0.50 0.50 1.00   1.00              
174 0.50 0.50 1.00   1.00              
175 0.50 0.50 1.00   1.00     while_node        
176 NA sem entrega inicial
177 0.50 0.50 1.00   1.00     lvaluexp_node, lvals       identifier_node vs. variable_node
178   sem inscrição
179 0.50 0.50 1.00   1.00              
180 0.44 0.44 0.75 lixo no repositório 1.00              
181 0.50 0.50 1.00   1.00              
182 0.50 0.50 1.00   1.00     while_node        
183 NA sem entrega inicial
184 0.50 0.50 1.00   1.00     program_node, while_node        
185 0.50 0.50 1.00   1.00     program_node, while_node        
186 NA sem entrega inicial
187 0.50 0.50 1.00   1.00     program_node, while_node        
188 0.50 0.50 1.00   1.00     program_node, while_node, file_node, body_node        
189 0.50 0.50 1.00   1.00     program_node        
190 0.50 0.50 1.00   1.00              
191 0.50 0.50 1.00   1.00              
192 0.25 0.25 1.00   0.00 não compila, targets   missing nodes, incomplete visitors       contactar prof responsável
193 0.25 0.25 1.00   0.00 não compila, ast, targets   missing nodes, program_node, while_node, incomplete visitors       contactar prof responsável
194 0.50 0.50 1.00   1.00     program_node, pointer_node, float_node, dups        
195 0.50 0.50 1.00   1.00              
196 0.25 0.25 1.00   0.00 (cvs ok)            
197 0.50 0.50 1.00   1.00     program_node, while_node        
198 0.25 0.25 1.00   0.00 não compila, ast   missing nodes, program_node, while_node       contactar prof responsável
199 0.50 0.50 1.00   1.00              
200 0.50 0.50 1.00   1.00              
201   sem inscrição
202   sem inscrição
203 NA sem entrega inicial

___EOT___; </runphp>