Trabalho Compilador Mini-Pascal
Mini-Pascal é um subconjunto dos recursos e possibilidades de construções da linguagem Pascal.
A linguagem Mini-Pascal adotada neste trabalho deve seguir a sintaxe descrita aqui.
Dois exemplos de programas em Mini-Pascal estão aqui e aqui.
Objetivo: Implementar utilizando o analizador de sua preferência a geração de código de três endereços para a linguagem Mini-Pascal.
O que deve ser implementado?
Um gerador de código de 3 endereços a partir de um programa em Mini-Pascal.
Deve-se indicar erros de sintaxe e duplicidade de declaração de um identificador do arquivo de entrada do usuário.
Erros de checagem de tipos (expressões com tipos incompatíveis, funções sem retorno, etc.) devem ser também apontados.
Deve-se certificar sobre a existência de variáveis, quando do seu uso e/ou atribuição.
O analizador deve ter como entrada um arquivo em Mini-Pascal e deve fornecer como saída o respectivo programa em código de três endereços (Veja a saída para os dois programas de exemplos anteriores: exemplo1 e exemplo2).
Sugestão de metodologia?
Trabalho em duplas.
Entendimento da sintaxe Mini-Pascal. Obs: Por gentileza, informe ao professor da disciplina sobre possíveis erros na sintaxe da linguagem.
Implementação do analisador sintático (sem ações semânticas).
Implementação da tabela de símbolos (variáveis, vetores, constantes, funções/procedimentos e parâmetros) e funções básicas (inserção, consulta).
Implementação da geração de código de 3 endereços.
Qual o Cronograma (Novo!!)?
20/08 - Início do trabalho
28/08 – 1o. Checkpoint: É esperado que cada dupla apresente a sua versão do analisador sintático.
18/09 – 2o. Checkpoint: Cada dupla deve apresentar a estrutura da tabela de símbolos, as funções de acesso à TS e algum início da geração de 3 end.
25/09 – 3o. Checkpoint: Cada dupla deve apresentar uma versão com geração de código de 3 endereços.
02/10 – Entrega do trabalho (uma semana após a prova):
Entregar um relatório indicando:
O que foi implementado
O que faltou implementar
A sintaxe para execução da ferramenta
Bugs/Falhas detectados e não corrigidos
Dificuldades encontradas durante o desenvolvimento do trabalho
Conclusões
Enviar o código fonte da ferramenta, o respectivo arquivo executável e um arquivo de entrada (testbench) para execução.
Como será a avaliação?
A avaliação da ferramenta constará das avaliações parciais dos checkpoints (cada checkpoint terá peso 1);
da avaliação do(s) documento(s) e software(s) entregue(s) (peso 2);
da avaliação final de todo o programa de acordo com a abrangência para com todos os testsbenchs (peso 5);
Bônus (peso 1.5): organização e documentação do código, arquivo README, scripts para configuração e execução, clareza na explicação do relatório;
Dicas/Sugestões
Tentem aproveitar o código que foi desenvolvido no Trabalho de Compiladores I.
Procurem iniciar o trabalho o quanto antes. O tempo voa!
Procurem documentar o código. Isso facilitará o trabalho colaborativo entre a dupla, além de ajudar a relembrar o que estava sendo feito no dia anterior.
Procurem retirar as dúvidas quanto ao entendimento da sintaxe antes de implementá-la. Isso permitirá que a etapa de implementação não seja interrompida.
Perguntas frequentes:
P: Se faltar no dia do checkpoint, fica com 0?
R: Há duas possibilidades: 1) Se souber, previamente, que irá faltar em dia de checkpoint, a dupla deve avisar ao professor que irá agendar um horário anterior ao dia do checkpoint. 2) caso a falta seja devido a um imprevisto, a dupla deve procurar o professor e deve justificar a ausência e, após isso, o professor marcará um horário para a entrevista. Faltas sem justificativa, aí sim, terão 0 como nota do checkpoint.
P: As notas serão as mesmas para os componentes da dupla?
R: Não. As entrevistas serão com a dupla mas a nota é individual. O fato de um membro da dupla faltar em dia de checkpoint não implica que a entrevista será cancelada. Por isso, é extremamente importante que ambos dividam o trabalho e, continuamente, atualizem-se quanto ao desenvolvimento do mesmo.
P: O que devo privilegiar: implementar todo o conteúdo de uma etapa ou implementar todas as etapas?
R: Se não houver tempo hábil, é melhor implementar o mínimo necessário em uma etapa e partir para a próxima. A contribuição deste trabalho para vocês é justamente a experiência prática com relação à geração de código intermediário.
P: O que fazer em caso de dúvidas no entendimento do trabalho (situações não cobertas pela especificação da linguagem, ausência de detalhes na atribuição das tarefas, etc.)?
R: Procure o professor o quanto antes: pessoalmente ou enviando mensagem eletrônica com subject: "Dúvidas: Trabalho1 - Compiladores II". Nesse último caso, procure discorrer sucintamente a sua dúvida. Além disso, aproveite bem os encontros de checkpoint para retirar suas dúvidas, sugerir alterações na atribuição do trabalho, justificar suas escolhas. Isso contará na sua participação e dedicação do trabalho.
P: Estou tendo problemas com o outro componente da dupla. O que devo fazer?
R: Uma das motivações desta tarefa é justamente melhorar a habilidade de trabalho em grupo. Nesse sentido, a dupla deve conversar bastante, procurando resolver todos os conflitos que porventura possam surgir. Saber ouvir opiniões, discutir idéias educadamente, ceder sobre pontos de vistas e dividir tarefas é o que aprendemos de melhor em um trabalho em grupo. Certamente, cada membro pode contribuir positivamente para a nota do outro colega da dupla. Mas, caso um dos membros "desista" do trabalho. O outro membro pode continuar a implementação que o trabalho será avaliado levando isso em consideração.
P: Se obter nota máxima em todos os itens da avaliação ficarei com 11.5?
R: Não. A nota máxima é 10! Além disso, esses pontos não são cumulativos.