linguagens formais e compila (cod. 5387)desousa/2011-2012/lfc/lfc.pdf · por forma a repor a aula...

12
Linguagens Formais e Compila¸c˜ao (cod. 5387) Departamento de Inform´ atica Universidade da Beira Interior Ano lectivo 2012/2013 Figura 1: Don’t make your compiler complain Esta p´agina no formato pdf 1

Upload: lehanh

Post on 13-Dec-2018

212 views

Category:

Documents


0 download

TRANSCRIPT

Linguagens Formais e Compilacao(cod. 5387)

Departamento de InformaticaUniversidade da Beira Interior

Ano lectivo 2012/2013

Figura 1: Don’t make your compiler complain

Esta pagina no formato pdf

1

1 Novidades

• Defesa (e entrega) dos trabalhos: a partir das 9h00 na sala 6.14.

• Segunda Frequencia. Local: 6.2 e 6.26.

• Entrega da primeira parte do trabalho adiada para a quinta-feira 9 deMaio as 9h00.

• Cada grupo e convidado a mostrar o estado actual do trabalho ao do-cente, marcacao da data e hora por email.

• Por forma a repor a aula teorica de segunda-feira 1 de Abril, haveraaula teorica quinta feira 4 de abril, das 14h00 as 16h00 na sala 6.03.

• Alteracoes no horario das aulas. Consulte 10.

• As constituicoes de grupo devem ser comunicadas por email ao regenteda UC.

• Enunciado do trabalho disponıvel.

• Relembra-se a seccao Fraude (ver 7.1.1) a todos os alunos...

• Inscricao em turmas praticas: via site dos servicos academicos.

• Como colocar uma duvida ao regente da Unidade Curricular?

1. Comparecer nas aulas e coloca-la directamente ao regente

2. Comparecer no horario de atendimento do regente e coloca-la di-rectamente

3. enviar um email ao regente ([email protected], (retireos UUU) ) com o assunto ”LFC: XXXX”em que XXX e o tıtuloda duvida em questao. Qualquer outro formato no assunto arriscacondenar o email ao esquecimento.

Conteudo

1 Novidades 2

2

2 Equipa Docente 3

3 Objectivos 3

4 Competencias por Adquirir 5

5 Programa 6

6 Metodologia de Ensino 6

7 Criterios de Avaliacao 77.1 Avaliacao da Componente Pratica . . . . . . . . . . . . . . . . 7

7.1.1 Fraudes . . . . . . . . . . . . . . . . . . . . . . . . . . 77.2 Avaliacao da Componente Teorica . . . . . . . . . . . . . . . . 7

7.2.1 Exame . . . . . . . . . . . . . . . . . . . . . . . . . . . 77.2.2 Datas importantes . . . . . . . . . . . . . . . . . . . . 8

7.3 Notas Mınimas . . . . . . . . . . . . . . . . . . . . . . . . . . 87.4 Nota Final . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

8 Material Pedagogico 98.1 Teoricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98.2 Praticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

8.2.1 Algumas solucoes . . . . . . . . . . . . . . . . . . . . . 108.3 Material Suplementar . . . . . . . . . . . . . . . . . . . . . . . 10

9 Referencias Bibliograficas 10

10 Horario 11

11 Atendimento 11

2 Equipa Docente

Simao Melo de Sousa (regente) - Gabinete 3.17 - Laboratorio 6.10 - BlocoVI.

3

3 Objectivos

Esta disciplina apresenta as principais fases da construcao dum compilador,isto e, um programa que transforma uma sequencia de caracteres, represen-tando um programa, numa sequencia de instrucoes maquina que poderao serexecutadas com a finalidade de produzir o resultado do programa original.

A construcao dum compilador envolve a utilizacao de varios metodos eferramentas de analise lexica e sintactica. A aprendizagem do funcionamentode tais analises constitui uma parte importante desta disciplina. As lingua-gens de programacao modernas de alto nıvel propoem uma deteccao precocedos erros gracas a uma analise semantica, cada vez mais complexa e poderosa,muitas vezes sob a forma dum controlo de tipos. A ultima fase da compilacaoe a geracao de codigo que e realizada em varias etapas que correspondem atraducao para varias linguagens intermedias antes de se concluir pela produ-cao de codigo executavel. Estudaremos mais particularmente a organizacaoda memoria para a gestao das chamadas de procedimentos. Esta apresen-tacao assenta sobre resultados da teoria das linguagens formais(automatosfinitos, expressoes regulares, gramaticas, em particular gramaticas livres decontexto, automatos de pilha, etc . . .), a qual daremos uma curta introducao.

Assim os objectivos genericos desta disciplina sao a apresentacao e estudode metodologias, tecnicas e ferramentas para o desenvolvimento processado-res de linguagens e de compiladores. Em particular pretende-se:

• Introduzir a nocao de linguagem e caracterizar o conceito de proces-samento de linguagens formais, estabelecendo os objectivos, as tarefasdum processador, as exigencias que lhe sao impostas e as tecnicas dedesenvolvimento (face as restricoes e a complexidade do problema).

• Introduzir os conceitos de gramatica e de automato, a sua teoria e asua aplicacao ao desenvolvimento de Processadores de Linguagens.

• Introduzir formalismos para especificacao da sintaxe e da semantica daslinguagens e estudar a implementacao dos analisadores que se podemderivar desses formalismos.

• Desenvolver capacidades de traducao de textos escritos em linguagensdistintas, utilizando metodos de analise e de sıntese mais usados peloscompiladores.

4

• Introduzir os processos, ferramentas, algoritmos e estruturas de dadosmais utilizados na traducao, na analise e na compilacao.

Para que estudar os Processos de Compilacao?

• Em primeiro porque e interessante e formador!

• Porque as tecnicas de processamento de linguagens e de construcao decompiladores tem aplicacoes fortes em muitas areas da informatica, enao so em construcao de compiladores.

• Atraves do estudo da compilacao, tentaremos mostrar o quao uteispara a informatica em geral sao as tecnicas e as ferramentas oriundasdeste estudo assim como procuraremos perceber as caracterısticas daslinguagens de programacao. De facto um compilador e um programade tamanho importante que e necessario bem estruturar. Este deve sertambem eficiente e e importante que esteja isento de erro. Ser capaz deescrever um compilador e assim uma competencia desafio para qualquerprogramador que se quer exımio.

Agradecimentos

O regente da disciplina gostaria de agradecer a Professora Doutora ChristinePaulin-Mohring (LRI - Paris Sud, Franca) por lhe ter facultado a sebentaintitulada “Cours de Compilation” de que e autora e por lhe permitido umuso livre e intensivo desta ultima.

O regente gostaria de agradecer igualmente o Professor Doutor Jean-Christophe Filliatre (LRI - Paris Sud / CNRS, Franca) pelo apoio prestadona componente pratica desta UC.

4 Competencias por Adquirir

Os estudantes deverao adquirir as seguintes competencias:

• Conceber, planear, desenhar e implementar em software processado-res de linguagens artificiais e de informacao especificada textualmentesegundo determinadas regras lexicais e sintacticas;

• Conceber e implementar em software as varias etapas relacionadas comcompiladores, nomeadamente:

5

– expressoes regulares e automatos finitos;

– analisadores sintacticos e semanticos;

– analisadores semanticos;

– optimizacoes de codigo;

– geradores de codigo para processadores ou para maquinas virtuais;

5 Programa

1. Introducao: o problema, o contexto, o processamento de linguagens nainformatica, a arquitectura dum compilador.

2. Processamento de Linguagens

• analise lexica, automatos finitos, gramaticas e expressoes regula-res. Processamento de linguagens regulares.

• analise sintactica: Automatos de pilha, gramaticas algebricas,analise descendente e analise ascendente.

• analise semantica: gramaticas de atributo, tabelas dos sımbolos,inferencia e verificacao de tipos.

3. Geracao de Codigo

• geracao de codigo intermedio

• analise e optimizacao de codigo

• geracao de codigo maquina

6 Metodologia de Ensino

As aulas presenciais sao divididas em duas categorias

• Aulas Teoricas onde sao expostos os conceitos teoricos, os algoritmosmas tambem as tecnologias capacitativas, proprios a construcao de umcompilador.

• Aulas Praticas com aplicacao das tecnicas de compilacao na constru-cao de compiladores para linguagens de programacao simples e paraarquitecturas simples.

6

7 Criterios de Avaliacao

A avaliacao tenta qualificar e quantificar a aprendizagem e a aquisicao decompetencia e de conhecimentos do aluno inscrito. Nesta unidade curricularesta avaliacao e dividida em duas partes: a avaliacao pratica e a avaliacaoteorica.

Listamos a seguir as diferentes componentes da avaliacao.

7.1 Avaliacao da Componente Pratica

Esta avaliacao mede em termos praticos a aquisicao dos conceitos expostos.Como tal e baseada na realizacao, durante o semestre lectivo, de um tra-balho realizado em grupo e entregue a equipa docente. Este trabalho seradividido em duas partes, dando ambas origem a uma defesa. Ambas aspartes carecem da entrega dum relatorio em LATEX e dum arquivos compri-mido com os ficheiros fontes que constituı a implementacao realizada assimcomo de um makefile permitindo a compilacao completa.

Esta avaliacao resultara na atribuicao da Nota da Componente Pra-tica (NCP).

Esta nota e calculada como a media das notas atribuıdas as duas partesdo trabalho.

7.1.1 Fraudes

A equipa docente gostaria de realcar que qualquer tipo de fraude em qualquerdos itens desta disciplina implica a reprovacao automatica do aluno faltoso,podendo ainda vir a ser alvo de processo disciplinar.

7.2 Avaliacao da Componente Teorica

A avaliacao da aquisicao de conceitos teoricos e baseado em provas escritas,nomeadamente aqui duas frequencias. Esta avaliacao resultara na atribuicaoda Nota da Componente Teorica (NCT) e sera calculada como a mediadas notas atribuıdas as duas frequencias.

7.2.1 Exame

O resultado do exame so ira incidir na NCT.

7

• O aluno admitido a exame mas reprovado na avaliacao contınua poderatentar uma nova atribuicao da NCT.

• O aluno aprovado na avaliacao contınua podera melhorar a sua NCT.

7.2.2 Datas importantes

• Primeira frequencia: 18 de Abril

• Segunda frequencia: 6 de Junho

• Entrega da primeira parte do trabalho: 26 Abril

• Defesa da primeira parte do trabalho: Por definir

• Entrega da segunda parte do trabalho: 7 de Junho

• Defesa da segunda parte do trabalho: Por definir

• exame primeira chamada: (conferir nos academicos)

• exame segunda chamada: (conferir nos academicos)

• exame epoca especial: (conferir nos academicos)

7.3 Notas Mınimas

Sera igualmente instaurado um regime de notas mınimas como criterio devalidacao da nota final. Esses mınimos sao:

• 6 valores (em 20) para a NCP

• 6 valores (em 20) para a NCT

Uma nota abaixo desses valores implica reprovacao a disciplina (Nao Ad-mitido a Exame).

8

7.4 Nota Final

Os mınimos sao os mınimos afixados por regulamento e sao validas individu-almente para cada parte (NCT e NCP).

Assim a nota final da disciplina e determinada de acordo coma seguinteformula:

NF = se (NCT ≥ 6) e (NCP ≥ 6)entao

NCP+NCT2

senao Reprovado

onde

NF = Nota Final (20 valores)NCT = Nota da Componente Teorica (20 valores)NCP = Nota da Componente Pratica (20 valores)

8 Material Pedagogico

Acetatos e sebenta distribuıdos nas aulas.

8.1 Teoricas

Capıtulo: IntroducaoCapıtulo: Analises sintacticas descendentesCapıtulo: Analises sintacticas ascendentesCapıtulo: Arvores de sintaxe abstractaCapıtulo: Analise semanticaCapıtulo: Analise semantica - ComplementarCapıtulo: Sistemas de tipos - ComplementarCapıtulo: Geracao de codigoCapıtulo: Tutorial MIPSCapıtulo: Geracao de codigo (versao antiga - compilacao para uma stack

based virtual machine) - ComplementarCapıtulo: Geracao de codigo - um exemple de uma stack based virtual

machine - Complementar

9

8.2 Praticas

Para quem necessitar uma actualizacao em programacao OCaml, encontraraaqui uma introducao a programacao funcional em OCaml.

Ficha : Introducao a analise sintactica com yacc/menhirFicha teorico-pratica - Aplicacao das linguagens formais a construcao de

analisadores, analises descendentes, ascendentes, analises semanticas, siste-mas de tipo.

Ficha pratica - Introducao a analise lexica , construcao de lexer, parsercom lex/yacc/menhir, analisadores de tipos, analisadores semanticos.

Ficha: Introducao a construcao de compiladores - a linguagem artih

8.2.1 Algumas solucoes

solucao de alguns exercıcios de analise lexica em ocaml (parte 1)solucao de alguns exercıcios de analise lexica em ocaml (parte 2)Exemplo de uma pequena calculadora feita de raız com base em proces-

samento de listas.um “htmlizer” para Caml feito em ocamllexResolucao completa: sistema de gestao de notascompilador e interpretador completo da linguagem arith com target a

maquina virtual “VM”Uma frequencia resolvidaResolucao de exercıcio sobre analises LL(1)Arquivo com provas de anos anteriores (contem algumas resolucoes).ZIP com exemplos de programas MIPSZIP com o codigo do compilador arith para MIPS *por completar*ZIP com o codigo do compilador arith para MIPS *completo*ZIP com o codigo do compilador arith para MIPS *completo* alternativo

(com typechecking)

8.3 Material Suplementar

Enunciado do trabalho.

9 Referencias Bibliograficas

As referencias principais sao: [4, 6, 1]

10

As restantes referencias listadas em fim de documento sao de consultaalternativa ou ocasional.

10 Horario

Tipo de aula Horario SalaTeorica Segunda-Feira das 9h00 as 11h00 6.02

Praticas Laboratoriais 1 Quinta-Feira das 11h00 as 13h00 6.13Praticas Laboratoriais 2 Quint-Feira das 9h00 as 11h00 6.13

11 Atendimento

HorarioSexta-Feira das 9h00 as 11h00

Referencias

[1] A. V. Aho, R. Sethi, and J. D. Ullman. Compilers: Principles, Techni-ques, and Tools. Addison-Wesley, 1985.

[2] A. W. Appel. Modern Compiler Implementation in C. Cambridge Uni-versity Press, 1998.

[3] A. W. Appel. Modern Compiler Implementation in Java. CambridgeUniversity Press, Cambridge, 1998.

[4] A. W. Appel. Modern Compiler Implementation in ML. CambridgeUniversity Press, 1998.

[5] D. Bagley. The great computer language shootout.http://www.bagley.org/~doug/shootout

[6] E. Chailloux, P. Manoury, and B. Pagano. Developing applications withobjective caml. http://caml.inria.fr/oreilly-book, 2003.

[7] G. Cousineau and M. Mauny. The functional approach to programming.Cambridge University Press, 1998.

11

[8] C. J.H. Jacobs, K. G. Langendoen, D. Grune, and H. E. Bal. ModernCompiler Design. Wiley, 2000.

[9] X. Leroy and P. Weis. Le Language Caml. iia, Inter Edition, 1993.

[10] X. Leroy and P. Weis. Manuel de Reference du Language Caml. iia,Inter Edition, 1993.

[11] J. R. Levine, T. Masson, and D. Brown. Lex & Yacc. Unix ProgrammingTool. O’Reilly, 1995.

[12] J. Mitchell. Foundation for Programming Languages. Foundations ofComputing, MIT Press, 1996.

[13] S. Muchnick. Advanced Compiler Design and Implementation. MorganKauffman, 1997.

[14] F. Nielson, H. R. Nielson, and C. L. Hankin. Principles of ProgramAnalysis. Springer-Verlag, 1999.

[15] H. R. Nielson and F. Nielson. Semantics with Ap-plications. John Wiley & Sons, Chichester, 1993.http://www.daimi.au.dk/~bra8130/Wiley_book/wiley.html

[16] OCaml Development Team. The Objective Camlsystem:Documentation and user’s manual, 2002.http://caml.inria.fr/ocaml/htmlman/index.html

[17] R. Wilhelm and D. Maurer. Compiler Design. Addison Wesley, 1995.

[18] G. Winskel. The Formal Semantics of Programming Languages: AnIntroduction. Foundations of Computing series. MIT Press, Cambridge,Massachusetts, February 1993.

Enviar comentarios e duvidas para (retire os UUU) : [email protected]

12