Laboratório de Compiladores

Colocado em 02/02/99:
 
     As pessoas que não conseguiram nota no trabalho ou nas entrevistas podem pegar um terceiro trabalho com o professor, que deverá ser entregue até depois do Carnaval.
 

Colocado em 25/01/99:

   O número da linha sendo analisada pelo analisador léxico não estava sendo inicializada. O novo analisador léxico corrige este erro.

    Os testes do analisador semântico estão prontos, zipados. Os testes er-sem*.pas devem resultar em erros de compilação. Os testes ok-sem*.pas não devem resultar em erro. O professor corrigirá os trabalhos ainda esta semana (25/01 - 29/01). Independente disto, você deverá corrigir todos os erros do seu trabalho. Execute o seu compilador com todos os testes e verifique se houve algum erro em ok-sem*.pas ou ausência de erro em er-sem*.pas. Os testes que começam com a letra "q" (qer-sem*.pas) não devem ser utilizados. Eles se referem a partes da linguagem Pascal não muito comuns como o uso do operador "and" com números inteiros.
 
 

Colocado em 12/01/99:

Pegue aqui os testes para geração de código, zipados. Estes testes são


Colocado em 10/12/98:

Terminamos com uns 27/28 trabalhos e a entrevista será mesmo por uma prova como previsto inicialmente. Há um grande número de trabalhos praticamente inviabilizando a entrevista oral e algumas pessoas poderiam ser prejudicadas injustamente.

Não há grandes problemas com a entrevista escrita. Quem tira uns oito pontos ou mais na prova da entrevista fica com 10. Assim, 100% das pessoas que fizeram o trabalho ficam com 10 de entrevista. Lembrem-se de que algumas pessoas poderam ser chamadas para uma entrevista oral se houver alguma dúvida quanto à prova. As datas das provas estão abaixo, nesta página.

O trabalho a ser entregue nesta Sexta, dia 11, deve ser entregue em um disquete com o executável e o código fonte, sem virus.
Não me importaria se entregassem o trabalho até Segunda de manhã, dia 14. Entregue também a listagem do analisador sintático
com o gerador de c'odigo (exceto para os ex-alunos do Paulo Bressan, que só devem entregar o analisador sintático, naturalmente).

 O próximo trabalho é o analisador semântico para todo mundo, inclusive para os ex-alunos do Paulo Bressan. Observe que vocês mesmo devem decidir o que deve ser conferido nesta análise. Se houver alguma dúvida quanto à validade de alguma construção de Pascal, me procurem. Como eu não passei uma definição precisa da linguagem, não poderei exigir detalhes como não considerar true como palavra reservada. Alguns erros comuns em compiladores podem ser encontrados no artigo ``Testes para Compiladores de Estudantes'' que está no xerox da produção.

Data de entrega: 18 de Janeiro. Comecem a fazer o trabalho agora em Dezembro. Senão não haverá tempo. Este trabalho será mais fácil do que o primeiro. Creio.

Entregue o código do analisador semântico (que deve estar junto com o sintático) e um disquete com o código fonte e o executável. E sem virus.


Colocado em  27/11/98

    Muito importante: o arquivo zip com o analisador sintático estava errado ! Sinto ! Eu coloquei uma versão nova da árvore de sintaxe abstratacom uma versão antiga do analisador. Então o compilador não encontrava o método getClassif de Symbol_no e a classe Keyword_no. O compilador que eu utilizei foi o Borland 4.52. Você deve modificar o item "Directories"  das opções do compilador colocando lá o diretório onde você descomprimiu o arquivo "sintat.zip".  Caso contrário o compilador não encontrará os arquivos de inclusão.
    Para compilar utilizando o Borland 5.x, você deve remover a declaração do tipo boolean em "inc.h" e trocar todos os true por TRUE  e todos os false por FALSE em todos os arquivos. Mas eu não testei estas modificações ! Nao tenho o Borland 5.x. Espero que funcione !

    Os alunos do Paulo Bressan que quiserem utilizar o código do professor devem refazer os arquivos analyze.cpp e analyze.h. Nao será necessário modificar nenhum dos outros arquivos ou mesmo o projeto do Borland. Basta fazer uma função "boolean analyze()" que retorna true se não houve erro de compilação e false caso contrário. Você pode utilizar as variáveis globais lex, ce,  e st. A primeira, lex, é utilizada para análise léxica:
                           lex->nextToken()
pega o próximo token que é colocado em lex->token.   A variável ce é utilizada para sinalizar erros:
                           ce->signal( identificador_esperado_err );
Se você quiser acrescentar um erro, adicione uma constante enumerada  em TpErrorCode de message.h e uma string na mesma posição no vetor strMensErro em message.cpp.
    A variável st é a tabela de símbolos já descrita em aula.

As produções da gramática que foram modificadas foram:
 
 
DeclProc  ::= "procedure" Ident [ ParamFormais ] ";"  [ DeclVarsLocais ] ComandoComposto 
ParamFormais ::= "(" SecaoParamFormais  { ";"  SecaoParamFormais }  ")" 
ComandoComposto ::= "begin"  [ Comando { ";" Comando }  ] "end" 

O restante da página a partir deste ponto nao foi alterada com relação à versão anterior.



 
  • Você pode pegar:
  •  Alguns avisos: