Construção de Compiladores

Últimas notícias:

10 de Julho

    As notas finais estão disponíveis. Turma de Terça. Turma de Quinta. Muitos dos que fizeram a Sub tiraram notas inferiores às notas das provas normais.
    Construção de Compiladores será oferecida como disciplina de RER no semestre que vem, provavelmente. Não sei quem será o professor responsável.
    Qualquer problema com as notas, procurem-me o mais rápido possível. Passarei as notas hoje, Terça ou amanhã. Entrarei de férias dia 23.

    Os alunos de RER e os futuros alunos podem pegar as provas aplicadas:
 

Turma

P1

P2

Sub

 SubTotal

Terça

8 Maio

 19 Junho

primeira   segunda

 

Quinta

10 Maio

 21 Junho

primeira   segunda

 


 

2 de Julho

    As pessoas que farão a prova na Sexta envolvendo toda a matéria deverão me enviar um e-mail (jose@dc.ufscar.br) confirmando a presença. Preciso de uma estimativa de quantas pessoas  irão fazer esta prova. Note que esta prova não é a substitutiva do pessoal da turma de Quinta que foi adiada para Sexta também às 16 horas. Se alguém quiser fazer esta prova ao invés da substitutiva, pode. Não aconselho.
    As
notas da turma de Terça e Quinta estão disponíveis.

28 de Junho

    Algumas pessoas entregaram trabalhos atrasados iguais a trabalhos de outras pessoas e todos receberam a mesma nota. Portanto, algumas pessoas que tinham entregue o trabalho anteriormente e recebido nota ficarão com a nota mínima (0).

    Pegue as provas aplicadas:
 

Turma

P1

P2

Sub

Terça

8 Maio

 19 Junho

primeira   segunda

Quinta

10 Maio

 21 Junho

 

    A prova de hoje, Quinta, foi adiada para Sexta dia  6 de Julho às 16 horas. Tentarei reservar uma sala na AT-4. Se conseguir, colocarei o número da sala nesta página.
    Muitos alunos me procuraram porque estavam se formando ou iriam ser jubilados e não tinham conseguido passar na matéria. Estes alunos terão uma nova change. Darei uma prova também na Sexta que vem às 16 horas para estes alunos, envolvendo
toda a matéria. Esta prova será diferente da sub, naturalmente. As questões serão mais difíceis e quem conseguir tirar mais do que 6 (P >= 6) ficará com 6 + (P - 6)*0.5 na média das provas, onde P é a nota da prova. Não haverão outras changes além desta e não haverá trabalhos práticos.
    Note que esta prova se aplica a todos os que não passaram na matéria, mesmo os que não vão se formar.
 

22 de Junho

As notas finais estão disponíveis: Turma de Terça e Quinta. A substitutiva é parcial. A sub de Quinta começará às 10 horas.

20 de Junho

As notas da turma de Terça já estão disponíveis. As notas dos trabalhos da turma de Quinta também. Infelizmente, tivemos doze trabalhos copiados. Algumas pessoas (Leide, Luis Fernando de Souza, Américo, Alessandro, Rafael Augusto e Gislaine) devem me procurar o mais rapidamente possível para esclarecer dúvidas minhas sobre o terceiro trabalho. Ainda não dei nota a estas pessoas.

A segunda prova (turma de terça) e a segunda lista em .pdf estão disponíveis.

18 de Junho

Na segunda lista de exercícios, não há exercícios sobre o capítulo 7. Mas estude este capítulo ! Você deve saber como calcular first e follow, como construir a tabela de análise e o raciocínio por trás de tudo. Contudo, não é necessário decorar regras, apenas entendê-las.

13 de Junho

  • A segunda lista de exercícios já está disponível em ps e dvi. No Linux, você pode utilizar o dvipdf ou dvi2pdf para converter o dvi em pdf. Não consegui converter o ps em pdf.
  • As notas do terceiro trabalho devem estar disponíveis na semana que vem, talvez depois das provas.
  • Algumas pessoas não colocaram a capa no terceiro trabalho e têm a oportunidade de fazê-lo até o início da semana que vem.
  • Na apostila, há um erro na página 77. No item 1 do parágrafo que começa por "Pode ser provado que uma gramática G é LL(1) se e somente se sempre que ...", lê-se "Não há um terminal a tal que ...". Deve ser "Não há um terminal a pertencente ao mesmo tempo a first(alpha) e first(beta)".
  • As notas do segundo trabalho estão disponíveis. Infelizmente, dez pessoas entregaram trabalhos copiados, sendo oito dos trabalhos iguais entre si. Uma atitude anti-ética, um desrespeito com o professor e com os colegas que fizeram os trabalhos. E muitos destas pessoas preencheram a capa do trabalho indicando que não tinham copiado parte nenhuma de ninguém. Outros preferiram não entregar a capa. Desonesto de qualquer modo.
  • Alguns trabalhos estão com nota 0.1, tanto o primeiro como o segundo trabalho. Eu não entendi estes trabalhos. Estas pessoas devem me procurar, no máximo, até a semana que vem para exclarecerem as minhas dúvidas. Procurem-me depois da prova na Terça (>16h)  ou da prova de Quinta (> 10h).


31 de Maio
    Só começarei a corrigir os trabalhos na próxima segunda, por absoluta falta de tempo. Tudo parece indicar que os trabalhos estão bons.
    Não haverá quarto trabalho.

23 de Maio
    Não haverá aula na próxima Terça feira dia 29.
    Os trabalhos só comecaram a serem corrigidos na próxima semana

21 de Maio
    Não haverá aula nesta Quinta dia 24. Estarei apresentando um artigo em um congresso em Curitiba.

16 de Maio
    Apenas cinco pessoas me enviaram os trabalhos. Destes, apenas um estava completo. E não tenho comentários genéricos a fazer sobre nenhum dos programas, apenas coisas bem específicas.
    O trabalho poderá ser entregue fora da data final. Será descontado apenas meio ponto por dia de atraso.
    As pessoas que fizeram o trabalho em grupo deveriam fazer dois itens a mais no trabalho. O segundo item não será mais exigido. Mas os que quiserem fazê-lo, poderão seguir as seguintes instruções:
    - crie uma classe ParserException subclasse de RuntimeException. Esta classe não precisa ter métodos;
    - crie um método signal para a classe ErrorMsg (ou para a classe Compiler, se o seu método de erro está nesta classe). Este método deve emitir a mensagem de erro e lançar uma exceção ParserException:
                throw new ParserException();
    - no método program da classe Compiler, salte todos os tokens se houver erro sintático na análise de uma função:
                try {
                     f = funDec();
                } catch ( Exception e ) {
                    houveErro = true;
                    while ( lexer.getToken().tk != Symbol.EOF  &&  lexer.getToken().tk != Symbol.FUN )
                         lexer.nextToken();
                    }
    - organize o resto do método program para que o código acima funcione.

11 de Maio
Gostaria de olhar os trabalhos antes da entrega final. Mas não teria tempo de ver todos os trabalhos e não é necessária uma cópia em papel. Então gostaria que as pessoas cujos nomes começem com letras entre A e E  enviassem o trabalho por e-mail, zipado, para o endereço jose@dc.ufscar.br. Coloque cc01 ou CC01 no subject --- não se esqueça disto. Envie apenas os fontes em Java.
    Desta forma terei uma boa amostragem dos trabalhos para fazer comentários. Estejam atentos, pois colocarei comentários sobre os trabalhos na Segunda à tarde ou Terça de manhã, nesta página.
    Importante: a entrega dos trabalhos fica para Sexta feira dia 18.
    Leia atentamente os comentários sobre o primeiro trabalho (abaixo) e os comentários sobre o segundo trabalho (a ser colocado).
    O
terceiro trabalho já foi definido. Não se esqueça de utilizar a folha como capa.

2 de Maio
A prova da turma de Quinta foi mudada de 3  para 10 de Maio.

25 de Abril

Uma lista de exercícios está disponível em .pdf. Opcionalmente poderia disponibilizá-la em .ps ou .tex (Latex).

24 de Abril

    Finalmente estou com o meu computador funcionando e posso atualizar esta página. O primeiro trabalho merece algumas observações:

  • não assuma que o professor possa corrigir detalhadamente o seu trabalho. São quase cem trabalhos, cada um com cinco a dez páginas com muitas nuancias e detalhes. No máximo consegue-se encontrar alguns problemas mais graves do código. No máximo;
  • use variáveis com nomes significativos. Nada de C, L, U, D para as classes Circle, Line, Up e Down;
  • fazer uma classe Comando para todos os cinco comandos torna o programa ilegível, cheio de switch's. Por que não uma classe para cada comando ?
  • as heranças de quase todos os trabalhos estavam erradas. Para que fazer todo mundo herdar de Expr ? Para que Ponto deve herdar de alguém ? Esta herança não é utilizada em lugar algum e deve ser removida. Este tipo de erro será considerado grave no próximo trabalho;
  • não use constantes literais (2, 5, 11). Leia o guia de correção dos trabalhos. Faça uma boa programação;
  • algumas pessoas entregaram trabalhos que sequer compilam. Isto será considerado anti-ético a menos que o indivíduo exponha o problema na folha de capa;
  • algumas pessoas entregaram trabalhos iguais entre si, em uma atitude anti-ética. Estas pessoas sequer procuraram o professor para tirar dúvidas. Todas tiraram a mesma nota. Zero;
  • o prazo de entrega do segundo trabalho foi adiado de uma semana. E além de escrever o código gerado em disco, deve-se ler a entrada de um arquivo;
  • para o próximo trabalho, utilize a folha como capa;
  • alguém tem o PdfWriter ? É um programa que permite a impressão de qualquer arquivo para um arquivo .pdf. Com ele podemos enviar pela rede arquivos .pdf sem vírus ou invés de .doc. Ou podemos converter .ps em .pdf, mais fáceis de imprimir.

11 de Abril:
    Você pode copiar qualquer quantidade de código de qualquer pessoa e inseri-la no seu trabalho. Desde que na primeira página esteja bem claro o que você copiou e o que você fez. Naturalmente, haverá um pequeno decréscimo na nota de acordo com a quantidade de cópia. Trabalhos iguais ou semelhantes sem a devida observação receberão pelo menos zero.

10 de Abril:
   Os problemas que tive com o Symantec Visual Café provavelmente foram devido ao Windows Millenium e não ao compilador. Provavelmente vocês não terão os problemas que tive.
    Coloquei todos os compiladores que utilizaremos neste curso nesta página,
aqui.  Se você já tiver pego os primeiros compiladores, pegue-os novamente, pois alguns detalhes foram modificados. Os compiladores feitos utilizando CUP já estão disponíveis.
    Até Quinta feira, dia 12, estará disponível nesta página o texto do segundo trabalho.

6 de Abril:
    O programa
classgen pode ser utilizado para gerar as classes da ASA (AST)..
 

Datas das provas:
 

Turma

P1

P2

Sub

Terça

8 Maio

<= 19 Junho

<= 26 Junho

Quinta

10 Maio

<= 21 Junho

<= 28 Junho

Material de aula:

Sobre o Symantec Café

    Tenho tido alguns problemas com o Symantec Visual Café 4.0:

  • frequentemente, o ambiente emite uma mensagem dizendo que falta uma dll. Neste caso, saia do programa e entre de novo;
  • se, ao abrir um projeto, o Visual Café sinalizar algum erro, apague todos os quatro arquivos do projeto. Clique em "File/New Projet" e faça o projeto novamente;
  • se você apagar um arquivo, fora do Visual Café, e abrir um projeto no Café que utiliza este arquivo, o Visual Café sinalizará um erro e terminará. Neste caso, crie um arquivo qualquer com o nome daquele que você apagou ou crie um novo projeto sem aquele arquivo.

Há alguns outros problemas menores com soluções desconhecidas. Se você descobrir como fazer este compilador funcionar direito, compartilhe esta informação conosco.

Trabalhos

 Não se esqueça de entregar cada trabalho com a folha de capa, com as perguntas respondidas.
 

Trabalho

Data de Entrega

Primeiro(html)  (pdf)

12 de Abril

Segundo(html)

18 de Maio

Terceiro(html)

8 de Junho

José (jose  @  dc.ufscar.br)