Buscar

Resumo das Aulas 01 a 03 de Tradutores (Professor Rezende)

Prévia do material em texto

semana terça quinta sexta
1 aula 1: 17/11/98 aula 2: 19/11/98 aula 3: 20/11/98
2 aula 4: 24/11/98 aula 5: 26/11/98 aula 6: 27/11/98
3 aula 7: 01/12/98 aula 8: 03/12/98 aula 9: 04/12/98
Resumo das aulas
Aula 1
17/11/98- Tradutores: compiladores e interpretadores. Classificação e elementos de um
compilador
Tradutor
O que é -
Programa que traduz programas escritos em uma linguagem de programação (linguagem
implementada)
para uma outra linguagem de programção, geralmente de menor nível (linguagem alvo).
A classe {programa-fonte, programa-objeto} pode ser referida como programa traduzível
O que faz -
Mapeia significado (comportamento esperado):
De programas na linguagem implementada (expresso pelo programa-fonte) =>
Para a linguagem alvo (expresso no programa-objeto)
Como executa -
Gerando o programa-objeto a partir do programa-fonte como dado de saída (compilador)
ou gerando os dados de saida do programa traduzível, traduzindo e executando
sequencialmente suas unidades (interpretador)
Tradutores
Compiladores:
A tradução de programa-fonte para programa-
objeto é feita independepentemente dos
parâmetros de execução (dados de entrada) deste
programa.
A execução de um programa traduzível pode
ocorrer depois de sua tradução (tradução em
bloco)
materia http://cic.unb.br/~rezende/compiladores_files/materia.htm#aula1
1 de 6 04/04/2018 15:10
Interpretadores:
A tradução de programa-fonte para programa-
objeto é feita intercaladamente com sua execução
(com os dados de entrada deste programa).
A execução de um programa traduzível não pode
ocorrer sem o ambiente de tradução (tradução
statement por statement )
Classificação de compiladores
Quanto ao tipo e formato do código gerado, e quanto aos de passos da tradução, onde cada
passo corresponde a um estagio onde a sequencia de elementos que constitui o programa
traduzivel é lida ou relida
Tipo Formato Passos
Código de Máquina
Código de maquina &
rotinas de suporte
Código de máquina Vrtual
Binário absoluto
(carregável)
Binário realocável 
(endereços relativos)
Simbólico 
Passo único (análise & sintese intercaladas)
Dois passos (análise sintática; análise
semântica & geração de código)
Múltiplos passos 
Elementos de um compilador
Aula 2:
19/11/98- Programas-fonte, Análise Sintática, Scanners, Parsers e Analise semântica.
Programa-fonte
O que é -
Conteúdo de módulos (ex:, arquivo(s) ) codificados em algum alfabeto com representação
materia http://cic.unb.br/~rezende/compiladores_files/materia.htm#aula1
2 de 6 04/04/2018 15:10
binária na máquina onde o compilador executa, formados por sequências de unidades
informativas denominados lexemas.
Se estas sequencias obedecerem às regras de especificação da linguagem implementada, o
programa fonte é traduzivel.
De que é feito -
De lexemas, que são as unidades informativas atômicas da linguagem implementada.
Os lexemas são formados por sequências de símbolos daquele alfabeto, geralmente o código
ASCII.
As regras que especificam a formação de lexemas são chamadas de regras léxicas da
linguagem implementada.
Estrutura sintática -
Lexemas com mesma função sintática na linguagem implementada são agrupados em classes
gramaticais.
Cada classe de lexemas é representada por um token.
Uma classe de lexemas, representada por um token, pode conter um lexema (token singular)
ou mais de um lexema (token não-singular).
Regras de produção de sequências de tokens que podem conter significado, formam a
gramática da linguagem implementada.
Análise Sintática
As regras da gramática que podem ser expressas através de produções livre de contexto, usando
tokens e variáveis gramaticais, formam a especificação sintática da linguagem implementada.
Nas linguagens de programação de alto nível hoje em uso, os tokens formam classes gramaticais
cujos lexemas podem ser reconhecidos por um DFA (automata finito) sobre o alfabeto da
linguagem.
As regras da especificação sintática que descrevem os tokens especificam o scanner, e as regras
que derivam sequências de tokens (tratados como símbolos terminais) especificam o parser para a
linguagem implementada.
Scanner
O que é:
Rotina da Análise Sintática que manipula arquivos com programa-fonte a ser compilado,
percorrendo-o sequencialmente para identificar o próximo token ocorrente no programa-
fonte, enquanto gerencia a tabela de símbolos associada ao programa, onde os lexemas
pertencentes a tokens não-singulares já encontrados foram armazenados e indexados (tabela
de símbolos, ou tabela de identificadores)
O que faz:
Quando chamado, identifica o proximo lexema e o token relativo a este lexema, retornando o
token identificado. Se o token for não-singular, identifica o índice do lexema na tabela de
símbolos, retornando também o índice deste lexema na tabela de símbolos do programa-
fonte.
Como executa:
materia http://cic.unb.br/~rezende/compiladores_files/materia.htm#aula1
3 de 6 04/04/2018 15:10
É chamado pelo parser. Caso necessário (se o token identificado for não-singular), verifica a
ocorrência do lexema na tabela de símbolos, inserindo-o na tabela caso não seja encontrado.
Parser
O que é:
Rotina principal da Análise Sintática (e do compilador) que recebe os tokens de um
programa-fonte reconhecidos pelo scanner, e tenta montar a árvore de derivação deste
programa segundo a gramática livre de contexto que especifica sintaticamente a linguagem
implementada.
O que faz:
Quando o programa-fonte é traduzível, gera uma representação intermediária deste programa
em uma estrutura codificadora de sua árvore de derivação segundo a gramática livre de
contexto da linguagem implementada.
Se o parser percebe que o programa-fonte não é traduzível gera mensagem de erro,
interrompendo a compilação. Caso contrário, encerra a execução quando finaliza a
construção de sua árvore de derivação.
Como executa:
Se o parser for descendente recursivo, tentará construir esta árvore da raiz para as folhas.
Se for ascendente, tentará construí-la das folhas para a raiz.
Análise Semântica
As regras de especificação da linguagem que não podem ser expressas por produções livre de
contexto, formam a especificação semântica da linguagem implementada.
As rotinas que verificam se um programa ou fragmento de programa sintaticamente correto satisfaz
à especificação semântica da lingagem implementada formam o analisador semântico do
compilador.
Uma sequência mínima de unidades gramaticais que pode conter significado para a tradução da
linguagem implementada constitui uma sentença (statement) desta linguagem, sendo a geração de
código baseada em sentenças.
Se as rotinas semânticas só começarem a executar após a árvore de derivação sintática do programa
ter sido construida pelo parser, o compilador será de dois ou mais passos. Caso contrário, o
compilador pode ser projetado de forma a executar apenas uma passagem pelo programa
(percorrendo-o apenas uma vez) sendo, neste caso, de um passo.
Aula 3
20/11/98- O projeto de um compilador. Definição da linguagem.
Nota
Devido a um imprevisto, houve dispensa de aula e de frequência.
Entretanto, foram adiantados alguns detalhes sobre o projeto de
materia http://cic.unb.br/~rezende/compiladores_files/materia.htm#aula1
4 de 6 04/04/2018 15:10
implementação de um compilador a ser executado no curso, a
pedido dos alunos
.
Especificação do projeto
O que é -
O projeto de um compilador começa pela definição da linguagem implementada. Esta
definição, que poderá sofrer modificações no transcurso do semestre (mas a custos crescentes
de complexidade na gerencia do projeto), deverá obedecer a critérios mínimos de
funcionalidade, descritos no tópico abaixo.
O que deve ser feito -
Cada estudante deve definir seu grupo (singular ou com dois estudantes) e produzir um
documento que define a linguagem a ser implementada, no prazo previsto para a primeira
etapado curso (ver cronograma).
Como deve ser feito -
A forma mais simples e prática de criar este documento é a partir de um manual de
compilador ou livro texto de programação baseado na linguagem escolhida como modelo
(preferencialmente o Pascal).
Requisitos do projeto
Quais são -
A linguagem deve ser
imperativa (statements são comandos);
fortemente tipada (a análise semântica deve fazer verificação de tipos);
modular (os programas devem poder conter subprogramas).
O que deve conter a linguagem -
 Constantes nomeadas, tipos primitivos e estruturados, variáveis, subprogramas, comandos de
repetição e seleção, um comando de entrada do teclado e um comando de saida para a tela de
execução.
Requisitos mínimos para um projeto de grupo singular:
Tipos primitivos: inteiro, booleano e char.
Tipos estruturados: vetor e registro
Um Comando de seleção (if) e um comando de repetição (while)
Subprogramas: função com passagem de parametros por valor, permitindo a recursão
Requisitos mínimos para um projeto de grupo de dois estudantes:
Os mesmos do grupo singular, acrescidos de:
Comando de seleção: cláusula else deve ser opcional;
Subprogramas: função e procedimento com passagem de parametros por valor ou por
referencia.
materia http://cic.unb.br/~rezende/compiladores_files/materia.htm#aula1
5 de 6 04/04/2018 15:10
próxima aula
________________{CONTINUAMENTE EM CONSTRUÇÃO}___________________
Alerta: Nenhum conteúdo desta página dever ser entendido como definitivo.
Consulte-a periodicamente para atualizar-se com correções e inclusões
materia http://cic.unb.br/~rezende/compiladores_files/materia.htm#aula1
6 de 6 04/04/2018 15:10

Outros materiais