Baixe o app para aproveitar ainda mais
Prévia do material em texto
Gramática Livre de Contexto 2021.1 COMPILADORES Compiladores O primeiro compilador Fortran levou 18 anos para ser implementado (Backus et al., 1957). Contudo, tem sido descobertas técnicas sistemáticas para manipular muitas das importantes tarefas que ocorrem durante uma compilação. Compiladores Um compilador é um programa que recebe como entrada um programa em uma linguagem de programação – a linguagem fonte – e o traduz para um programa equivalente em outra linguagem – a linguagem objeto O papel de um compilador é relatar quaiquer erros nos programas fontes detectados durante esse processo de tradução. O programa objeto pode ser em linguagem de máquina executável ou assembly. Compiladores Compiladores Um interpretador é outro tipo comum de processador de linguagens. Em vez de produzir um programa objeto como resultado da tradução, um interpretador executa diretamente as operações específicas no programa fonte sobre as entradas fornecidas pelo usuário. Interpretadores Compiladores O programa objeto em uma linguagem de máquina normalmente é muito mais ráído do que um interpretador, porém, um interpretador oferece um melhor disgnóstico de erro do que do que um compilador porque executa o programa fonte instrução por instrução. Processadores da linguagem JAVA combinam compilador e interpretador Um programa Java é compilador para uma forma intermediária chamad bytecodes e os bytecodes são interpretados por uma máquina virtual. Compiladores e Interpretador Pré-Processador Um programa fonte pode ser subdividido em módulos armazrnados em arquivos separados A tarefa de coletar o programa fonte é do pré-processador. Pré-Processador Estrutura de um Compilador O processo de compilação é constituído de duas etapas: ● Análise – quebra o programa fonte em peças constituintes e cria uma representação intermediária; ● Síntese – constrói o programa alvo desejado a partir da representação intermediária. Estrutura de um Compilador Durante a análise, as operações presentes no programa fonte são determinadas e registradas numa estrutura hierárquica chamada árvore. Conseqüentemente, esse tipo especial de árvore é chamada de árvore sintática. Numa árvore sintática: I.Cada nó representa uma operação; II.e, cada nó folha representa um argumento da operação. Analisador de Programas Fonte Muitas ferramentas de computador que manipulam programas fonte primeiro efetuam algum tipo de análise. Alguns exemplos de ferramentas que tratam do programa fonte: Editores de Estrutura – Recebe uma seqüência de comandos para construir um programa fonte. Organizador de Impressão – Analisa um programa e o imprime de uma forma que sua estrutura torna-se claramente visível. Ex.: Comentários podem aparecer com um tipo de fonte e declarações com indentação proporcional ao seu aninhamento. Analisador de Programas Fonte Verificador Estático – Lê um programa, analisa-o e tentar descobrir potenciais bugs sem executar o programa. Ex.: Pode detectar partes do programa que nunca serão executadas, ou que uma variável pode ser usada antes de inicializada. Avaliador de Expressões – Executa as operações indicadas no programa fonte. Ex.: Pode construir uma árvore sintática de uma atribuição e avaliar o resultado “caminhando pela árvore”. Estrutura de um Compilador A análise impõem uma estrutura gramatical e depois cria uma representação intermediária do programa fonte. A análise detecta se o programa fonte está sintaticamente mal formada ou semanticamente indocrreta, informando erro. A análise também cria uma estrutura chamada de tabela de símbolos A síntese cria o programa objeto a partir do programa intermediário e das informações da tabela de símbolos A anállise é chamada de front-end e a síntese de back-end Estrutura de um Compilador Análise Léxica (Scanner) O analisador léxico lê o fluxo caracteres que compo m o ẽ programa fonte e os agrupa em sequências significativas, chamadas lexemas Para cada lexema, o analisador léxico produz como saída um token no formato <nome-token, valor_atributo> nome-token: é um símbolo abstrato valor-atributo: aponta para uma entrada da tabela de símbolos Análise Léxica (Exemplo) Análise Sintática O analisador sintático cria uma representação intermediária tipo ávore dos tokens produzidos no analisador léxico Análise Semântica O analisador semântico utiliza a árvore de sintaxe e a tabela de símbolos para verificar a consistência semântica do programa fonte com a definição da linguagem. Por exemplo, verificação de tipos e coerção Análise Semântica Geração de Código Intermediário Programa fonte → Código Intermediário → Código Objeto A representação intermediária deve ter duas propriedades importantes: ser facilmente produzida e ser facilmente traduzida para a máquina alvo Código de três instruções (possui 3 operandos): Cada instrução possui no máximo um operador do lado direito Gerar um nome temporário para guarda valores gerados Algumas instruções possui menos de 3 operandos Geração de Código Intermediário Otimização de Código Objetivo de fazer um código objeto melhor: Mais rápido Código Menor Consuma menos energia Otimização de Código Geração de Código Código intermediário → código objeto Se a linguagem objeto for código e máquina de alguma arquitetura, devem-se selecionar os registradores ou localizações de memória para cada uma das variáveis usadas no programa. Geração de Código Desafi o 3 Desafio 3: Regras de Parse Indentificar e documentar as regras de parse do analisador da linguagem mostrando exemplos de uso. Mínimo de 15. conditionalExpression : logicalOrExpression ('?' expression ':' conditionalExpression)? ; logicalOrExpression : logicalAndExpression | logicalOrExpression '||' logicalAndExpression ; logicalAndExpression : inclusiveOrExpression | logicalAndExpression '&&' inclusiveOrExpression ; Exemplo: numero >= 0 ? numero++ : numero--; “Educação não transforma o mundo. Educação muda as pessoas. Pessoas transformam o mundo.” Paulo Freire Slide 1 Slide 2 Slide 3 Slide 4 Slide 5 Slide 6 Slide 7 Slide 8 Slide 9 Slide 10 Slide 11 Slide 12 Slide 13 Slide 14 Slide 15 Slide 16 Slide 17 Slide 18 Slide 19 Slide 20 Slide 21 Slide 22 Slide 23 Slide 24 Slide 25 Slide 26 Slide 27 Slide 28 Slide 29
Compartilhar