8
ATIVIDADES PRÁTICAS SUPERVISIONADAS Ciência da Computação 8ª. Série Compiladores A atividade prática supervisionada (ATPS) é um procedimento metodológico de ensino-aprendizagem desenvolvido por meio de um conjunto de etapas programadas e supervisionadas e que tem por objetivos: Favorecer a aprendizagem. Estimular a corresponsabilidade do aluno pelo aprendizado eficiente e eficaz. Promover o estudo, a convivência e o trabalho em grupo. Desenvolver os estudos independentes, sistemáticos e o autoaprendizado. Oferecer diferentes ambientes de aprendizagem. Auxiliar no desenvolvimento das competências requeridas pelas Diretrizes Curriculares Nacionais dos Cursos de Graduação. Promover a aplicação da teoria e conceitos para a solução de problemas práticos relativos à profissão. Direcionar o estudante para a busca do raciocínio crítico e a emancipação intelectual. Para atingir estes objetivos a ATPS propõe um desafio e indica os passos a serem percorridos ao longo do semestre para a sua solução. A sua participação nesta proposta é essencial para que adquira as competências e habilidades requeridas na sua atuação profissional. Aproveite esta oportunidade de estudar e aprender com desafios da vida profissional. AUTORIA: Diego Daniel Duarte Faculdade Anhanguera de Limeira

2013_2_Ciencia_Computacao_8_Compiladores

Embed Size (px)

Citation preview

Page 1: 2013_2_Ciencia_Computacao_8_Compiladores

ATIVIDADES PRÁTICAS

SUPERVISIONADAS

Ciência da Computação

8ª. Série Compiladores

A atividade prática supervisionada (ATPS) é um procedimento metodológico de

ensino-aprendizagem desenvolvido por meio de um conjunto de etapas

programadas e supervisionadas e que tem por objetivos:

Favorecer a aprendizagem.

Estimular a corresponsabilidade do aluno pelo aprendizado eficiente e

eficaz.

Promover o estudo, a convivência e o trabalho em grupo.

Desenvolver os estudos independentes, sistemáticos e o autoaprendizado.

Oferecer diferentes ambientes de aprendizagem.

Auxiliar no desenvolvimento das competências requeridas pelas Diretrizes

Curriculares Nacionais dos Cursos de Graduação.

Promover a aplicação da teoria e conceitos para a solução de problemas

práticos relativos à profissão.

Direcionar o estudante para a busca do raciocínio crítico e a emancipação

intelectual.

Para atingir estes objetivos a ATPS propõe um desafio e indica os passos a

serem percorridos ao longo do semestre para a sua solução.

A sua participação nesta proposta é essencial para que adquira as

competências e habilidades requeridas na sua atuação profissional.

Aproveite esta oportunidade de estudar e aprender com desafios da vida

profissional.

AUTORIA:

Diego Daniel Duarte

Faculdade Anhanguera de Limeira

Page 2: 2013_2_Ciencia_Computacao_8_Compiladores

Ciência da Computação - 8ª. Série - Compiladores

Diego Daniel Duarte

Pág. 2 de 8

COMPETÊNCIAS E HABILIDADES

Ao concluir as etapas propostas neste desafio, você terá desenvolvido as competências e habilidades que constam, nas Diretrizes Curriculares Nacionais, descritas a seguir.

Visão sistêmica e holística da área. Profundo conhecimento dos aspectos teóricos, científicos e tecnológicos relacionados à

computação. Competência para identificar, analisar, documentar e solucionar problemas e

necessidades passíveis de solução via computação. Saber conciliar teoria e prática.

Participação Para a elaboração dessa atividade, os alunos deverão previamente organizar-se em

equipes de 3 a 4 participantes e entregar seus nomes, RAs e e-mails ao professor da disciplina. Essas equipes serão mantidas durante todas as etapas.

Padronização O material escrito solicitado nessa atividade deve ser produzido de acordo com as

normas da ABNT1, com o seguinte padrão: em papel branco, formato A4; com margens esquerda e superior de 3cm, direita e inferior de 2cm; fonte Times New Roman tamanho 12, cor preta; espaçamento de 1,5 entre linhas; se houver citações com mais de três linhas, devem ser em fonte tamanho 10, com

um recuo de 4cm da margem esquerda e espaçamento simples entre linhas; com capa, contendo:

nome de sua Unidade de Ensino, Curso e Disciplina; nome e RA de cada participante; título da atividade; nome do professor da disciplina; cidade e data da entrega, apresentação ou publicação.

DESAFIO

Desde a revolução industrial, iniciada em meados do século XVIII, a humanidade tem desenvolvido cada vez mais mecanismos tecnológicos com o intuito de facilitar o dia-a-dia e otimizar tarefas rotineiras. Nesses já mais de dois séculos, a história presenciou a criação de muitos equipamentos, desde o simples tear até as máquinas mais sofisticadas, como andróides capazes de imitar gestos humanos.

Um equipamento também proveniente dessa revolução e que ainda tem muita visibilidade nos dias atuais, são os robôs, utilizados nas indústrias para realizarem tarefas como soldagem, pintura, aplicação de parafusos, entre outras, substituindo os trabalhadores

1 Consultar o Manual para Elaboração de Trabalhos Acadêmicos. Unianhanguera. Disponível em:

<http://www.unianhanguera.edu.br/anhanguera/bibliotecas/normas_bibliograficas/index.html>.

Page 3: 2013_2_Ciencia_Computacao_8_Compiladores

Ciência da Computação - 8ª. Série - Compiladores

Diego Daniel Duarte

Pág. 3 de 8

que ficavam nas linhas de montagem, executando tarefas repetitivas, como retrata o filme “Tempos Modernos” de Charles Chaplin.

Esses robôs, embora pareçam equipamentos complexos, têm um funcionamento similar aos computadores que estamos acostumados a lidar no nosso dia-a-dia. Cada robô realiza um conjunto restrito de operações. O robô também disponibiliza um conjunto de

instruções que servem para dizer a ele qual operação deverá ser realizada.

Suponha um robô simples de soldagem como o ilustrado ao lado. Esse robô teria uma base móvel com a capacidade de girar para a direita e para a esquerda, na qual estaria presa a uma haste que sustentaria um braço móvel que poderia ser acionado para se movimentar para cima e para baixo. No final desse braço haveria o aparelho de solda, que poderia girar para os lados e ser acionado para se movimentar, girando para cima e para baixo e, também, poderia ser acionado para aplicar a solda. Esse robô poderia ter também, por ser similar a um computador, a capacidade de mensurar o tempo através de uma contagem dos milissegundos

passados desde uma data predeterminada e poderia estar acoplado a uma balança para determinar o peso da peça com a qual ele estivesse trabalhando.

Um equipamento como esse, poderia ter o seguinte conjunto de instruções de baixo nível:

RBR X: rotaciona a base para a direita;

RBL X: rotaciona a base para a esquerda;

RJU X: rotaciona a junção do cotovelo para cima;

RJD X: rotaciona a junção do cotovelo para baixo;

RHR X: rotaciona o soldador para a direita;

RHL X: rotaciona o soldador para a esquerda;

RHU X: rotaciona o soldador para cima;

RHD X: rotaciona o soldador para baixo;

WEL X: aplica solda por x milissegundos;

GTM R: coloca o tempo atual no registrador R;

GHG R: colocar o peso da peça atual (em miligramas) no registrador R;

MOV X Y: associa o valor X ao registrador Y;

ADD X Y: adiciona o valor X ao valor do registrador Y;

SUB X Y: subtrai o valor X do valor do registrador Y;

MUL X Y: multiplica o valor do registrador Y por X e armazena o resultado em Y;

DIV X Y: divide o valor do registrador Y por X e armazena o resultado em Y;

JMP X: muda o fluxo de execução para a instrução X;

IFZ X Y: salta para a instrução Y se o valor do registrador X for 0;

IFP X Y: salta para a instrução Y se o valor do registrador X for positivo;

IFN X Y: salta para a instrução Y se o valor do registrador X for negativo. Esse conjunto de instruções de baixo nível, entretanto, torna o desenvolvimento de

aplicações para esse equipamento uma tarefa bastante complexa. Esse desafio consiste em projetar e especificar uma linguagem de alto nível que possa ser utilizada para se programar um robô de solda como o apresentado, além do desenvolvimento de um compilador capaz de realizar a tradução entre essa linguagem de alto nível e a linguagem de baixo nível

Figura 1 - Exemplo de

Braço Mecânico

Page 4: 2013_2_Ciencia_Computacao_8_Compiladores

Ciência da Computação - 8ª. Série - Compiladores

Diego Daniel Duarte

Pág. 4 de 8

utilizada pelo robô. Para tanto o aluno é convidado a especificar uma linguagem de programação própria e criar as soluções de software para realizar as análises léxicas e sintáticas dessa linguagem, bem como, o gerador de código para a linguagem utilizada pelo robô proposto nesse desafio.

Objetivo do Desafio Projetar e especificar uma linguagem de alto nível para ser utilizada na programação

de um robô e solda e desenvolver um compilador para realizar a tradução da linguagem de alto nível para baixo nível.

ETAPA 1 (tempo para realização: 5 horas)

Aula-tema: Introdução ao Processo de Compilação. Fases de Compilação. Analisador Léxico.

Essa atividade é importante para poder projetar uma linguagem de alto nível que seja suficiente para possibilitar uma total utilização dos recursos do equipamento proposto no desafio dessa atividade.

Para realizá-la, devem ser seguidos os passos descritos.

PASSOS

Passo 1 (Aluno)

Analisar as instruções básicas disponibilizadas pelo equipamento. Fazer anotações sobre essas instruções, indicando como elas podem ser utilizadas na elaboração de um cenário complexo de programação. Desenvolver um programa simples para aplicar 10 miligramas de solda em uma peça.

Passo 2 (Equipe)

Apresentar suas anotações para o grupo e discutir as diferenças percebidas por cada membro. Montar um esboço, contendo as indicações de todos os membros do grupo. Discutir e decidir juntamente com o grupo sobre quais indicações são pertinentes e quais não são.

Passo 3 (Equipe)

Identificar, com base nas anotações do grupo, os seguintes componentes de uma linguagem de programação: variáveis, estruturas de controle (condicional, repetição e salto), operações aritméticas, funcionalidades específicas. Definir, de acordo com o entendimento do grupo, uma linguagem que possibilite a utilização desses componentes.

Page 5: 2013_2_Ciencia_Computacao_8_Compiladores

Ciência da Computação - 8ª. Série - Compiladores

Diego Daniel Duarte

Pág. 5 de 8

Sites sugeridos para pesquisa

• SILVA, L. T. Desenvolvimento de um Analisador de Código ANSI-C. 2006. p. 30-36. Disponível em: <https://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=0B5L2wBbTEIAaMDllMDgwMTYtZmI5ZS00MGViLTkyOWYtZDEwMmFmNjFmZGI4&hl=en&authkey=CNL

YvqIE>. Acesso em: 13 ago. 2011.

Passo 4 (Equipe)

Elaborar um relatório denominado “Especificação de Linguagem de Alto Nível,” contendo a especificação formal da linguagem proposta, utilizando EBNF. Acrescentar nesse relatório a tabela dos tokens que serão utilizados pela linguagem.

Sites sugeridos para pesquisa

• SCOWEN, R. S. Extended BNF. 1998. Disponível em: <https://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=0B5L2wBbTEIAaNWYyZGJhZjktNjg5Zi00ZWQ1LTg5MGYtMGZlNzViNDA0NjJj&hl=en&authkey=CMPp6tIH>. Acesso em: 13 ago. 2011.

Bibliografia complementar

AHO, A.; ULLMANN, J.; REVI, S.. Compiladores: princípios, técnicas e ferramentas. 3ª ed. Rio de Janeiro: LTC, 2006.

ETAPA 2 (tempo para realização: 5 horas)

Aula-tema: Analisador Léxico.

Essa atividade é importante para poder construir um analisador léxico capaz de identificar se um programa construído na linguagem especificada não possui erros de escrita.

Para realizá-la, devem ser seguidos os passos descritos.

PASSOS

Passo 1 (Equipe)

Reescrever o programa para aplicar 10 miligramas de solda em uma peça, utilizando a linguagem proposta na Etapa 1 desta ATPS. Realizar, caso necessário, adequações na linguagem proposta para que ela possa efetivamente ser suficiente para a programação necessária.

Passo 2 (Equipe)

Elaborar com base na tabela de totens apresentada na Etapa 1 desta ATPS, os autômatos para reconhecimento dos tokens da linguagem proposta.

Page 6: 2013_2_Ciencia_Computacao_8_Compiladores

Ciência da Computação - 8ª. Série - Compiladores

Diego Daniel Duarte

Pág. 6 de 8

Passo 3 (Equipe)

Desenvolver um analisador léxico para processamento de programas na linguagem proposta. Tomar como base para esse analisador os autômatos elaborados no passo anterior. Lembrar de realizar primeiramente as verificações das sequências de maior comprimento.

Sugestão Desenvolver o analisador léxico como uma função que retorna o próximo token reconhecido. Essa abordagem permitirá que esse código seja facilmente reaproveitado nas etapas futuras desta ATPS.

Passo 4 (Equipe)

Executar o analisador léxico, usando o código criado no passo 1 dessa etapa como entrada. Avalie se o analisador léxico está retornando corretamente os tokens necessários. Realizar as correções, caso necessário, até que todos os tokens sejam corretamente reconhecidos.

Nota para o Professor No final dessa Etapa o aluno irá entregar o software do analisador léxico desenvolvido. Sugere-se que o professor viabilize a entrega do material por meios digitais, como CD ou e-mail.

ETAPA 3 (tempo para realização: 5 horas)

Aula-tema: Análise Sintática Top-Down Recursiva com Retrocesso. Análise Sintática Bottom-Up. Métodos e Técnicas de Construção de Analisadores Sintáticos.

Essa atividade é importante para poder analisar sintaticamente os programas desenvolvidos na linguagem proposta pelo seu grupo e identificar eventuais erros de programação.

Para realizá-la, devem ser seguidos os passos descritos.

PASSOS

Passo 1 (Equipe)

Elaborar a tabela de análise sintática preditiva para a linguagem projetada pelo grupo.

Passo 2 (Equipe)

Desenvolver um analisador sintático para a linguagem projetada pelo grupo. Utilizar a tabela de análise sintática preditiva para definição de quais procedimentos devem ser executados.

Sugestão Utilizar o analisador léxico desenvolvido na Etapa anterior desta ATPS para retornar os tokens que devem ser analisados.

Passo 3 (Equipe)

Alterar a tabela de análise sintática preditiva com a indicação dos tokens de sincronização. Adicionar a funcionalidade de reporte de erros ao analisador sintático projetado, realizando

Page 7: 2013_2_Ciencia_Computacao_8_Compiladores

Ciência da Computação - 8ª. Série - Compiladores

Diego Daniel Duarte

Pág. 7 de 8

o descarte de símbolos de entrada quando um erro for encontrado até que um token de sincronização seja identificado.

Passo 4 (Equipe)

Executar o analisador sintático, usando o código criado no Passo 1 da Etapa 2 desta ATPS como entrada. Avaliar se o analisador sintático está sendo executado corretamente. Inserir alguns erros propositais no código e avaliar se esses erros estão sendo reportados corretamente. Realizar as correções, caso necessário.

Nota para o Professor No final dessa Etapa o aluno irá entregar o software do analisador sintático desenvolvido. Sugere-se que o professor viabilize a entrega do material por meios digitais, como CD ou e-mail.

ETAPA 4 (tempo para realização: 5 horas)

Aula-tema: Análise Semântica. Implementação de Mecanismos Semânticos (Mini Compilador). Otimizador de Código. Linguagem Assembly e Geração de Código.

Essa atividade é importante para poder produzir um tradutor que seja capaz de converter programas criados na linguagem definida para a linguagem utilizada pelo equipamento especificado nesta ATPS.

Para realizá-la, devem ser seguidos os passos descritos.

PASSOS

Passo 1 (Equipe)

Desenvolver um gerador de código intermediário que realize a tradução dos programas criados na linguagem definida para uma linguagem intermediária.

Sugestão Utilizar como linguagem intermediária um código de três endereços, pois esse código pode ser facilmente convertido para o código do robô.

Passo 2 (Equipe)

Desenvolver mecanismos para otimização de código e aplicar esses mecanismo ao gerador de código intermediário projetado no Passo 1 dessa Etapa.

Passo 3 (Equipe)

Desenvolver um tradutor que processe o código intermediário utilizado e gere um programa equivalente na linguagem apresentada para o equipamento proposto nesta ATPS.

Passo 4 (Equipe)

Integrar todos os processos criados nesta ATPS de forma a construir um compilador para a linguagem definida pelo grupo. Executar o compilador, tendo como entrada o programa definido no passo 1 da Etapa 1 desta ATPS. Verificar se o programa gerado está correto.

Page 8: 2013_2_Ciencia_Computacao_8_Compiladores

Ciência da Computação - 8ª. Série - Compiladores

Diego Daniel Duarte

Pág. 8 de 8

Realizar as correções, caso necessário, até que o compilador final esteja gerando corretamente a tradução para a linguagem de baixo nível do robô de solda.

Nota para o Professor No final dessa Etapa o aluno irá entregar o software do compilador desenvolvido. Sugere-se que o professor viabilize a entrega do material por meios digitais, como CD ou e-mail.

Livro Texto da Disciplina MENEZES, Paulo Fernando Blauth. Linguagens Formais e Automatos. 5ª ed. Porto Alegre: Sagra Luzzatto, 2005.