Baixe o app para aproveitar ainda mais
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
Compartilhar