Trabalho Compilador Mini-Pascal e/ou HMDES
Mini-Pascal é um subconjunto dos recursos e possibilidades de construções da linguagem Pascal. HMDES é uma linguagem declarativa que possibilita descrever recursos de hardware de um sistema microprocessado.
As linguagens Mini-Pascal e HMDES serão adotadas neste trabalho. A sintaxe dessas linguagens foi descrita na disciplina de Compiladores I.
Objetivo: Implementar utilizando o analisador de sua preferência (Bison, Javacc ou continuar a implementação do analisador iniciado em Compiladores I) a geração de código de três endereços para a linguagem Mini-Pascal (Parte 1). Posteriormente (Parte 2), serão requisitadas novas implementações que tomarão como base a Parte 1..
O que deve ser implementado (Parte 1)?
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/ou HMDES e deve fornecer como saída o respectivo programa em código de três endereços (Veja a saída para dois programas de exemplos: exemplo1 e exemplo2).
O que deve ser implementado (Parte 2)?
Para qualquer um dos itens escolhidos, deve-se implementar o algoritmo para criação de blocos básicos e, pelo menos, uma otimização básica (DCE, CSE, identidade algébrica).
O item escohido para implementação (junto com a criação de blocos básicos) deve tomar como entrada um arquivo com código de 3-endereços. Exemplos de códigos em 3-end. estão aqui e aqui.
As sugestões de implementação são as seguintes:
Redução de força e eliminação de variáveis de indução
A saída deve ser o programa transformado. Ou seja, o programa com a transformação de expressões “fortes” em expresões “fracas” e eliminação de variáveis de indução.
2. Algoritmo de alcance de definições (Reaching Definitions): Deve-se implementar aqui o algoritmo de alcance de definições (cálculo dos conjuntos in, out, gen e kill) para cada bloco básico de um programa/procedimento;
A saída deve ser o programa separado em blocos básicos e as informações de gen, kill in e out para cada bloco básico.
3. Algoritmo de Next-Use Information
A saída deve ser a informação de próximo-uso para cada declaração.
4. Algoritmo de escalonamento de instruções baseado em list scheduling
A saída deve ser o código de 3-endereços escalonado de acordo com o algoritmo.
5. Algoritmo de alocação de registradores (sem inserção de spill-code)
6. Algoritmo para criação de du-chains e ud-chains.
Sugestão de metodologia?
Trabalho em duplas.
Entendimento da sintaxe da linguagem (Mini-Pascal ou HMDES). Obs: Por gentileza, informe ao professor da disciplina sobre possíveis erros na sintaxe da linguagem.
Implementação do analisador sintático com 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 ?
22/07: Início do trabalho
02/09: Aula para desenvolvimento do trabalho. Nessa aula, todos os alunos devem utilizar o horário para desenvolver atividades de implementação relacionadas ao trabalho. Ao final da aula, cada grupo deve elaborar e entregar um relatório (1 ou 2 páginas) informando os progressos alcançados.
14/09: 1o. Checkpoint: É esperado que cada grupo apresente a estrutura da tabela de símbolos, as funções de acesso à TS e início da geração de 3 end.
16/11: 2o. Checkpoint: É esperado que cada grupo apresente a versão final da geração de 3 end. e o andamento da implementação da otimização/geração de código escolhida.
18/11 e 23/11: Aula para desenvolvimento do trabalho. Nessa aula, todos os alunos devem utilizar o horário para desenvolver atividades de implementação relacionadas ao trabalho. Ao final da aula do dia 23/11, cada grupo deve elaborar e entregar um relatório (1 ou 2 páginas) informando os progressos alcançados.
30/11: Entrega do trabalho. Cada grupo passará por uma rápida entrevista com o professor onde será perguntado detalhes sobre a implementação realizada. Entregar artigo seguindo modelo da SBC (mesmo formato usado no artigo de Compiladores I), contendo os seguintes itens: O que foi implementado (Análise Sintática, Ações Semânticas, Otimizações, etc.), sintaxe para execução da ferramenta, Resultados de arquivos de entrada, conclusões (inclua: o que faltou implementar, dificuldades encontradas durante o desenvolvimento do trabalho, Bugs/Falhas detectados e não corrigidos)
Enviar para o e-mail do professor o código fonte da ferramenta, o respectivo arquivo executável e arquivos 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 3);
da avaliação final de todo o programa de acordo com a abrangência para com todos os testsbenchs (peso 5);
Bônus (peso 2): organização e documentação do código, arquivo README, scripts para configuração e execução, clareza na explicação do artigo, participação nas aulas dedicadas para desenvolvimento do trabalho, continuidade com a ferramenta desenvolvida em Compiladores I;
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: Trabalho de 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 12?
R: Não. A nota máxima é 10! Além disso, esses pontos não são cumulativos.