• Nenhum resultado encontrado

0002-05SEM-COMPILADORES-Aula2

N/A
N/A
Protected

Academic year: 2021

Share "0002-05SEM-COMPILADORES-Aula2"

Copied!
34
0
0

Texto

(1)

COMPILADORES

Aula 02

(2)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

COMPILADOR X INTERPRETADOR COMPILADORES

- Vantagens:

- Vantagens:

1) A execução do programa é mais rápida. 2) Estruturas de dados mais completas; 3) Permitem a otimização de código fonte.

- Desvantagens:

- Desvantagens:

1) Várias etapas de tradução;

2) Processo de correção de erro e de depuração é mais demorado;

3) Programação final é maior, o que gera a necessidade de mais memória;

INTERPRETADORES

-Vantagens:Vantagens:

1) Depuração é mais simples; 2) Consomem menos memória;

3) Resultado imediato do programa ou rotina desenvolvida.

- Desvantagens:Desvantagens:

1) A execução do programa é mais lenta. 2) Estrutura de dados demasiadamente simples;

3) Necessário fornecer o programa fonte ao utilizador;

(3)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

Estrutura de um Tradutor

• Independentemente da linguagem a ser traduzida

ou do programa objeto a ser gerado, os tradutores, de um modo geral, compõem-se de funções padronizadas, que compreendem a análise do programa fonte e a posterior síntese para a derivação do código objeto.

(4)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

(5)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

Análise Léxica:

O objetivo é identificar sequências de caracteres que O objetivo é identificar sequências de caracteres que constituem unidades léxicas (TOKENS).

constituem unidades léxicas (TOKENS).

- Os caracteres pertencem ao alfabeto da linguagem? - Identificar Tokens;

- Desprezar comentários e espaços em branco; - Inicia a construção de Tabela de Símbolos;

- Envia mensagens de erro em caso de unidades léxicas não aceitas pela linguagem em questão.

(6)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

TOKENS:

Constituem classes de símbolos tais como:Constituem classes de símbolos tais como:

- Palavras reservadas; - Delimitadores;

(7)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

TOKENS:

Podem ser representados:Podem ser representados:

- Através do próprio símbolo (delimitadores, palavras reservadas);

- Ou par ordenado, no qual o primeiro elemento indica a classe do símbolo e o segundo, um índice para uma área onde o próprio símbolo foi armazenado (tabela de identificadores)

(8)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

Análise Léxica:

A saída do analisador léxico é uma cadeia de Tokens A saída do analisador léxico é uma cadeia de Tokens que é passada para a próxima fase, a Análise Sintática.

que é passada para a próxima fase, a Análise Sintática.

- O analisador léxico é implementado como uma subrotina que funciona sob o Comando do Analisador Sintático;

(9)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

Exemplo de um Analisador Léxico:

Programa fonte Pascal:

While I < 100 do I := J + I;While I < 100 do I := J + I;

Após passar pelo analisador léxico:

[while,] [id,7] [<,] [cte,13] [do,] [id,7] [:=,] [id,12] [+,] [id,7] [;,] [while,] [id,7] [<,] [cte,13] [do,] [id,7] [:=,] [id,12] [+,] [id,7] [;,] Cadeia de tokens produzida pelo analisador léxico

[ CLASSE DO SÍMBOLO , ÍNDICE DE TABELA ]

(10)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

Análise Sintática:

Tem por função verificar se a estrutura gramatical do Tem por função verificar se a estrutura gramatical do programa esta correta.

programa esta correta.

- Identifica sequência de símbolos através de uma varredura ou PARSING da sequência de tokens;

- Produz a árvore de derivação resultante da aplicação das regras gramaticais da linguagem.

- Detecção de erros de síntaxe, identificando a posição e tipo de erro ocorrido;

(11)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

Exemplo:

Considere o comando Pascal:

While <expressão> do <comando>While <expressão> do <comando>

Neste caso, a estrutura <expressão> deve apresentar-se sintaticamente correta, e sua avaliação deve retornar um valor do tipo lógico.

Ou seja,

(12)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

Análise Semântica:

Tem por função verificar se as estruturas do programa Tem por função verificar se as estruturas do programa irão fazer sentido durante a execução.

irão fazer sentido durante a execução. Exemplos:

Exemplos:

-Verifica se um identificador declarado como variável é utilizado para tal;

-Verifica se existe compatibilidade entre os operandos e operadores em expressões;

(13)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

Análises Sintáticas e Semânticas:

As regras gramaticais que definem as construções da As regras gramaticais que definem as construções da linguagem podem ser descritas através de PRODUÇÕES linguagem podem ser descritas através de PRODUÇÕES (regras que produzem, geram) cujos elementos incluem (regras que produzem, geram) cujos elementos incluem SÍMBOLOS TERMINAIS (Fazem parte do código fonte) e SÍMBOLOS TERMINAIS (Fazem parte do código fonte) e SÍMBOLOS NÃO-TERMINAIS (geram outras regras).

SÍMBOLOS NÃO-TERMINAIS (geram outras regras).

No exemplo que segue, as produções são apresentadas na Forma Normal de No exemplo que segue, as produções são apresentadas na Forma Normal de Backus (Backus Naur Form ou BNF)

(14)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

Símbolos terminais = Negrito

Símbolos não-terminais = delimitados por “<“ e “>”; PRODUÇÕES BNF

<comando> <while> | <atrib> | ...

<while> while <expr_bool> do <comando> <atrib> <variavel> := <expr_arit>

<expr_bool> <expr_arit> < <expr_arit>

<expr_arit> <expr_arit> + <termo> | <termo> <termo> <numero> | <variavel>

<variavel> I | J <numero> 100

(15)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

<comando> <while>

while <expr_bool> do <comando>

<expr_arit> < <expr_arit> <atrib>

<termo> <termo> <variavel> := <expr_arit>

<variavel> <numero> I <expr_arit> + <termo>

I 100 <termo> <variavel>

<variavel> I

(16)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

Geração de Código Intermediário:

Esta fase utiliza a representação interna produzida Esta fase utiliza a representação interna produzida pelo analisador sintático e gera como saída uma pelo analisador sintático e gera como saída uma sequência de código.

sequência de código.

Esse código pode, eventualmente , ser o código objeto Esse código pode, eventualmente , ser o código objeto final mas, na maioria das vezes, constitui-se num código

final mas, na maioria das vezes, constitui-se num código

intermediário, pois a tradução de código fonte para

intermediário, pois a tradução de código fonte para

objeto em mais de um passo apresenta algumas

objeto em mais de um passo apresenta algumas

vantagens.

(17)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

Vantagens da tradução em mais de um passo:

-Possibilita a otimização de modo a obter-se o código

-Possibilita a otimização de modo a obter-se o código

objeto final mais eficiente;

objeto final mais eficiente;

-Resolve, gradualmente, as dificuldades de passagem de

-Resolve, gradualmente, as dificuldades de passagem de

código de alto nível para baixo nível;

código de alto nível para baixo nível;

A geração de Cod. Interm. pode estar distribuído nas

A geração de Cod. Interm. pode estar distribuído nas

fases anteriores OU mesmo NÃO EXISTIR no caso da

fases anteriores OU mesmo NÃO EXISTIR no caso da

tradução direta para o código objeto, quando o tradutor é

tradução direta para o código objeto, quando o tradutor é

bem simples.

(18)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

Código Intermediário e o Código Objeto Final:

A grande diferença é que o Código Intermediário não A grande diferença é que o Código Intermediário não especifica detalhes, tais como quais registradores serão

especifica detalhes, tais como quais registradores serão

usados, quais endereços de memória serão

usados, quais endereços de memória serão

referenciados, etc...

(19)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

Exemplo de Código Intermediário :

PROGRAMA FONTE PASCAL

While I < 100 do I := J + I; While I < 100 do I := J + I;

PROGRAMA CÓDIGO INTERMEDIÁRIO

L0 if I < 100 goto L1 L0 if I < 100 goto L1 goto L2goto L2 L1 TEMP := J + I L1 TEMP := J + I

I:= TEMPI:= TEMP

goto L0goto L0 L2 ...

(20)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

Otimização de Código:

Esta fase tem por objetivo otimizar o código Esta fase tem por objetivo otimizar o código intermediário em termos de velocidade de execução e intermediário em termos de velocidade de execução e espaço de memória.

(21)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

Exemplo de Código Otimizado :

CÓDIGO INTERMEDIÁRIO L0 if I < 100 goto L1 L0 if I < 100 goto L1 goto L2goto L2 L1 TEMP := J + I L1 TEMP := J + I I := TEMPI := TEMP goto L0goto L0 L2 ... L2 ... CÓDIGO OTIMIZADO L0 if I >= 100 goto L2 L0 if I >= 100 goto L2 I := J + II := J + I goto L0goto L0 L2 ... L2 ...

(22)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

Geração de Código Objeto:

Esta fase tem por objetivos: Produção de código Esta fase tem por objetivos: Produção de código objeto, reserva de memória para constantes e variáveis, objeto, reserva de memória para constantes e variáveis, seleção de registradores, etc.

seleção de registradores, etc.

É a fase mais difícil, pois requer uma seleção cuidadosa das instruções e dos registradores da máquina alvo a fim de produzir código objeto eficiente.

(23)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

Exemplo de Código Objeto:

CÓDIGO OBJETO L0 MOV AX, I CMP AX, 100 JGE L2 MOV AX, J MOV BX, I ADD BX MOV I, AX L2 ... CÓDIGO INTERMEDIÁRIO OTIMIZADO L0 if I >= 100 goto L2 L0 if I >= 100 goto L2 I := J + II := J + I goto L0goto L0 L2 ... L2 ...

(24)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

Gerência de tabelas:

Este módulo compreende um conjunto de tabelas e Este módulo compreende um conjunto de tabelas e rotinas associadas que são utilizadas por quase todas as rotinas associadas que são utilizadas por quase todas as fases do tradutor.

fases do tradutor.

Algumas tabelas são fixas para cada linguagem, por exemplo, a tabela de palavras reservadas, tabela de delimitadores, tabela de símbolos, etc...

(25)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

Estrutura das tabelas:

A estrutura que possui importância fundamental é A estrutura que possui importância fundamental é aquela que é montada durante a análise do programa aquela que é montada durante a análise do programa fonte, com informações sobre:

fonte, com informações sobre:

-Declaração de variáveis;

-Declaração dos procedimentos ou subrotinas; -Parâmetros de sub-rotinas; etc;

(26)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

Estrutura das tabelas:

Essas informações são armazenadas na Tabela de Tabela de Símbolos

Símbolos.

-A cada ocorrência de um identificador no programa fonte, a tabela é acessada, e o identificador é procurado na tabela. Quando encontrado, as informações associadas a ele são comparadas com as informações obtidas no programa fonte, sendo que qualquer nova informação é inserida na Tabela.

(27)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

Característica da Tabela de Símbolos:

Deve ser estruturada de uma forma tal que permita Deve ser estruturada de uma forma tal que permita rápida inserção e extração de informações, porém deve rápida inserção e extração de informações, porém deve ser tão compacta quanto possível

(28)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

Atendimento a erros:

Este módulo tem por objetivo “tratar os erros” que Este módulo tem por objetivo “tratar os erros” que são detectados em todas as fases de análise do são detectados em todas as fases de análise do programa fonte.

programa fonte.

Qualquer fase analítica deve prosseguir em sua análise ainda que erros tenham sido detectados

É fundamental que o tradutor prossiga na tradução, após a detecção de erros, de modo que o texto seja totalmente analisado.

(29)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

Geradores de Compiladores:

Atualmente a implementação de linguagens de Atualmente a implementação de linguagens de programação é apoiada por sistemas geradores de programação é apoiada por sistemas geradores de compiladores (compiler-compilers, compiler generators, compiladores (compiler-compilers, compiler generators, translator-writing systems).

(30)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

Classificação dos grupos:

Geradores de analisadores léxicosGeradores de analisadores léxicos

Geradores de analisadores sintáticosGeradores de analisadores sintáticos

(31)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

Geradores de analisadores léxicos:

Geram automaticamente reconhecedores para Geram automaticamente reconhecedores para símbolos léxicos a partir de especificações de gramáticas símbolos léxicos a partir de especificações de gramáticas ou expressões regulares.

(32)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

Geradores de analisadores sintáticos:

Produzem reconhecedores sintáticos a partir de Produzem reconhecedores sintáticos a partir de gramáticas livres de contexto.

(33)

Tradução de Linguagens de Programação

Tradução de Linguagens de Programação

Geradores de geradores de código:

recebem como entrada regras que definem a recebem como entrada regras que definem a tradução de cada operação da linguagem intermediária tradução de cada operação da linguagem intermediária para a linguagem de máquina.

(34)

Atividade

Atividade

Responder o questionário da atividade 01.

Referências

Documentos relacionados

O relatório encontra-se dividido em 4 secções: a introdução, onde são explicitados os objetivos gerais; o corpo de trabalho, que consiste numa descrição sumária das

Os principais resultados obtidos pelo modelo numérico foram que a implementação da metodologia baseada no risco (Cenário C) resultou numa descida média por disjuntor, de 38% no

[r]

Sem esquecer a Fraude Fiscal, analisemos também um pouco do crime de branqueamento, art. Em crónica publicada no Diário do Minho, em 1 de Dezembro de 2010, Cultura, era

E, quando se trata de saúde, a falta de informação, a informação incompleta e, em especial, a informação falsa (fake news) pode gerar danos irreparáveis. A informação é

O tema proposto neste estudo “O exercício da advocacia e o crime de lavagem de dinheiro: responsabilização dos advogados pelo recebimento de honorários advocatícios maculados

Os recursos financeiros de que trata este Programa serão depositados pela Prefeitura Municipal de Limeira diretamente em conta corrente aberta, especialmente para este fim, em nome

de professores, contudo, os resultados encontrados dão conta de que este aspecto constitui-se em preocupação para gestores de escola e da sede da SEduc/AM, em