CES-41 COMPILADORES Capítulo IV Complementos de Análise Léxica.

Slides:



Advertisements
Apresentações semelhantes
Manipulação de Arquivos de Dados
Advertisements

While While Condição // comandos End While. Exemplos While Var contador As Integer contador = 0 While (contador < 10) contador += 1 console.ConsoleWrite(contador)
Espalhamento.
Dúvidas surgidas na aula prática de BCB. 2 Alocação de espaços int m = 3; // THE NUMBER OF ROWS. int n = 5; // THE NUMBER OF COLUMNS. data = new long.
1 Estruturas de Controle Márcia J. N. Rodrigues Lucena Especialização em Técnicas e Ferramentas de Apoio à Decisão Departamento.
Implementando um Montador com LEX e YACC
Banco de Dados Aula 01: Conceitos Básicos
SISTEMA BINÁRIO Hardware de Computadores. SISTEMA BINÁRIO Hardware de Computadores.
Modelo planetário: errado Elétrons são descritos por meio de funções de onda Mecânica Quântica : probabilidades.
PGF5001 – Mecânica Quântica 1 Prof. Emerson Passos.
Prof. Celso Gramática.
Prof. Celso Gramática.
Prof. Celso Gramática Prof. Celso
Grupo Paralelismo – Unesp RC
FORTRAN 90 Denise Yumi Takamura.
CCS – Centro de Componentes Semicondutores Luiz Carlos Moreira/Jacobus W. Swart ASIC´s – Application Specific Integrated Circuits.
SQL Procedural Junho/2006.
Estruturas de Dados para projeto de SGBD. Estruturas de dados analisadas Estruturas de nível Esparso Denso Combinadas Arvore B+ Tabela de hash.
Introdução à Consulta 24/3/06. Categorias de comandos DDL : estruturação de objetos de BD Ex. create table, drop index, alter table... DML: manipulação.
Funções de Linha 24/04/06. Funções de Linha Gerar ou construir novo valor não existente na tabela inicial. Valor construído a partir de dados de uma ou.
INTRODUÇÃO À GEOMETRIA DO ESPAÇO-TEMPO
Sistemas Operacionais
Prof. Dr. Helder Anibal Hermini
Utilização do montador Daedalus
Teste Funcional de Software
Análise e Solução de Problemas
Gustavo Vieira Pereira
Fazendo Slides no Power Point
Estatística: Aplicação ao Sensoriamento Remoto SER 202 Aula 01 - ANO 2013 Camilo Daleles Rennó
CES-11 LAB 03 Bitmap Quadtree
Capítulo VII – Tipos Enumerativos e Estruturas 7.1 – Tipos enumerativos 7.2 – A necessidade de estruturas 7.3 – Manipulação dos campos de uma estrutura.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo III Comandos de Controle.
1.3 – Interpretadores – Compiladores versus Interpretadores
CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo III Declarações e Comandos de Atribuição.
CES-41 COMPILADORES Aulas Práticas
CES-10 INTRODUÇÃO À COMPUTAÇÃO
Capítulo VI – Variáveis Indexadas
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo VII Variáveis Indexadas Numéricas.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo XI Noções de Estruturas de Dados.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo XI Encadeamento de Estruturas por Ponteiros.
Capítulo IX – Ponteiros 9.1 – Introdução 9.2 – Relação entre ponteiros e variáveis indexadas 9.3 – Alocação dinâmica de memória 9.4 – Variáveis indexadas,
CES-41 COMPILADORES Aulas Práticas Capítulo III Análise Semântica no Yacc.
CES-41 COMPILADORES Aulas Práticas Capítulo III Análise Semântica no Yacc.
Capítulo III Diagramas de Transições
Capítulo V Análise Sintática
CES-41 COMPILADORES Capítulo I Introdução.
Capítulo I – Conceitos Primários 1.1 – Estrutura de um computador 1.2 – Informações manipuladas por um computador 1.3 – Evolução das linguagens de programação.
Curso Técnico em Informática La Salle - Canoas
FUNDAÇÃO CARLOS CHAGAS
Aritmética de ponto flutuante Erros
Desempenho A rápida taxa de melhoria na tecnologia de computadores veio em decorrência de dois fatores: avanços na tecnologia utilizada na construção.
Laboratório de Programação Prof. Oscar Luiz Monteiro de Farias
Gerador de Analisadores Léxicos
Prof. Giovanny Lucero Introdução Prof. Giovanny Lucero
Linguagens Formais e Tradutores Análise Sintática - 1
Linguagens Formais e Tradutores Linguagens Regulares (Revisão)
Tecnologia para Web JavaScript Enrique Pimentel Leite de Oliveira
Recursividade Estrutura de Dados.
Adriano Santiago Wilber Garcia Pereira
PRODUTOS E FATORES: UMA QUESTÃO NOTÁVEL Professor: Graciano Pianezzer Beletti.
Curso de Programação em C++ Universidade Federal do Ceará Departamento de Engenharia Estrutural e Construção Civil Prof: Evandro Parente Junior Monitor:
Baseado no documento do Prof. Ronaldo Martins da Costa
LINGUAGENS DE PROGRAMAÇÃO
04:27 Introdução Tipos de Fluxo de Dados e de Arquivos Manipulação de Arquivos em Java Classes FileReader e FileWriter Classes FileInputStream e FileOutputStream.
Sistemas de Informação Prof. Me. Everton C. Tetila Modelo de dados relacional Banco de Dados I.
Programação Concorrente com Thread Java
Computação Gráfica Geometria de Transformações
Introdução Ciência da Computação estudo de algoritmos –ÊNFASE ao estudo de DADOS armazenamento manipulação refinamento (a partir de dados cru) estrutura.
Lex Linguagem (e compilador) para especificar analisadores léxicos.
CES-41 COMPILADORES Aulas Práticas
Transcrição da apresentação:

CES-41 COMPILADORES Capítulo IV Complementos de Análise Léxica

Capítulo IV – Complementos de Análise Léxica 4.1 – Interface entre programa-fonte e compilador 4.2 – Bufferização do programa 4.3 – Observação de átomos seguintes 4.4 – Lex para observar átomos seguintes

4.1 – Interface entre Programa-Fonte e Compilador Os principais conceitos sobre análise léxica foram introduzidos no capítulo anterior: Os principais conceitos sobre análise léxica foram introduzidos no capítulo anterior: – Formação e classificação de átomos – Diagrama de transições léxicas – Ferramenta do analisador sintático

Sendo a interface entre programa-fonte e compilador, pode executar algumas tarefas secundárias: Pular comentários, espaços em branco, tabulações, new- lines, etc (vistos em diagramas de transições e em Flex) Pular comentários, espaços em branco, tabulações, new- lines, etc (vistos em diagramas de transições e em Flex) Contar o número de linhas lidas, possibilitando a inclusão do número da linha em mensagens de erro Contar o número de linhas lidas, possibilitando a inclusão do número da linha em mensagens de erro Gerenciar o controle das linhas e sua continuação, nos programas escritos em linguagens em que a divisão em linhas é relevante (Fortran, Cobol) Gerenciar o controle das linhas e sua continuação, nos programas escritos em linguagens em que a divisão em linhas é relevante (Fortran, Cobol)

Exemplo: contagem de linhas no diagrama de transições léxicas – para a análise sintática

Exemplo: uma linha de programa em Fortran Caractere na coluna 6: a linha é continuação da anterior Caractere na coluna 6: a linha é continuação da anterior

4.2 – Bufferização do Programa A complexidade do analisador léxico é bem menor, conceitualmente falando, do que a dos outros componentes de um compilador A complexidade do analisador léxico é bem menor, conceitualmente falando, do que a dos outros componentes de um compilador No entanto, é nele que o front-end de um compilador consome a maior porção de seu tempo No entanto, é nele que o front-end de um compilador consome a maior porção de seu tempo É o componente que lê caractere por caractere do arquivo do programa É o componente que lê caractere por caractere do arquivo do programa

A velocidade do analisador léxico é crucial no projeto de um compilador A velocidade do analisador léxico é crucial no projeto de um compilador Os caracteres podem ser lidos em blocos (1 ou 4 Kbytes), evitando-se a taxa de um acesso ao disco por caractere lido Os caracteres podem ser lidos em blocos (1 ou 4 Kbytes), evitando-se a taxa de um acesso ao disco por caractere lido Tais blocos podem ser armazenados um por vez num buffer (string) e a análise de cada caractere pode ser feita nele Tais blocos podem ser armazenados um por vez num buffer (string) e a análise de cada caractere pode ser feita nele Essa bufferização pode ficar encapsulada numa função; no caso do Mini-Pascal, isso poderia acontecer na função NovoCarac Essa bufferização pode ficar encapsulada numa função; no caso do Mini-Pascal, isso poderia acontecer na função NovoCarac

4.3 – Observação de Átomos Seguintes Algumas linguagens requerem, para a formação e classificação de um átomo, a observação de átomos que o seguem, dentro do programa Algumas linguagens requerem, para a formação e classificação de um átomo, a observação de átomos que o seguem, dentro do programa Em Fortran, espaços em branco são eliminados durante o pré-processamento, dificultando a classificação dos átomos Em Fortran, espaços em branco são eliminados durante o pré-processamento, dificultando a classificação dos átomos

Exemplo: Em Fortran, os comandos Os átomos de cada comando são: 1º) DO5I=1.25: (ID, DO5I), (ATRIB), (CTREAL, 1.25) 2º) DO5I=1,25: (DO), (ROTULO, 5), (ID, I), (ATRIB), (CTINT, 1), (VIRG), (CTINT, 25) (CTINT, 1), (VIRG), (CTINT, 25) Nos dois comandos, até antes da virgula ou do ponto, nada se pode decidir sobre a formação e classificação de todos esses átomos Nos dois comandos, até antes da virgula ou do ponto, nada se pode decidir sobre a formação e classificação de todos esses átomos DO 5 I = 1.25 DO 5 I = 1,25 DO5I=1.25DO5I=1,25 são transformados em

1º) DO5I=1.25: (ID, DO5I), (ATRIB), (CTREAL, 1.25) 2º) DO5I=1,25: (DO), (ROTULO, 5), (ID, I), (ATRIB), (CTINT, 1), (VIRG), (CTINT, 25) (CTINT, 1), (VIRG), (CTINT, 25) Os átomos formados na tentativa de definição de outro deles podem ser colocados numa fila pelo analisador léxico e entregues um por um, quando solicitados pelo analisador sintático Os átomos formados na tentativa de definição de outro deles podem ser colocados numa fila pelo analisador léxico e entregues um por um, quando solicitados pelo analisador sintático A função NovoAtomo do Mini-Pascal só deve procurar novos caracteres, quando a fila de átomos estiver vazia A função NovoAtomo do Mini-Pascal só deve procurar novos caracteres, quando a fila de átomos estiver vazia

4.4 – Lex para Observar Átomos Seguintes A linguagem Lex admite uma expressão regular do tipo A linguagem Lex admite uma expressão regular do tipo r1 /r2 onde r1 e r2 são expressões regulares Significado: uma cadeia se enquadra em r1 somente se for seguida de outra cadeia que se enquadre em r2 Significado: uma cadeia se enquadra em r1 somente se for seguida de outra cadeia que se enquadre em r2

Exemplo: Em Fortran, para o caso dos comandos DO5I=1.25 e DO5I=1,25 A palavra reservada do pode ser reconhecida pela expressão: A palavra reservada do pode ser reconhecida pela expressão:do/({letra}|{digito})*=({letra}|{digito})*, Seja o programa em Lex a seguir: Seja o programa em Lex a seguir:

%{ #define DOLAR 0 #defineID1 #defineNUM2 #defineDO3 #defineVIRG4 #definePONTO5 #defineEQ6 union { char *cadeia; int valor;} yylval;%} delim[ \t\n] ws{delim}+ dig[0-9] letr[A-Za-z] num{dig}+ id{letr}({letr}|{dig})*

% {ws}{ ;} do/(({letr}|{dig})*=({letr}|{dig})*,)|{ws} {return DO;} {id}{yylval.cadeia = yytext; return ID;} {num}{yylval.valor = atoi (yytext); return NUM;} return NUM;} "="{return EQ;} ","{return VIRG;} "."{return PONTO;} "$"{return DOLAR;} %

main () { int i; while (i = yylex ()) { printf ("tipo = %d; atributo = ", i); printf ("tipo = %d; atributo = ", i); switch (i) { switch (i) { case EQ: case PONTO: case VIRG: case DO: printf ("%s\n", yytext); break; case ID: printf ("%s\n", yylval.cadeia); break; case NUM: printf ("%d\n", yylval.valor); break; }}}

Rodando para a seguinte entrada: xxx do 123 do5i=1,25 do5i=1.25 $ Resultados: Obs.: o programa não reconhece constantes reais

Observações finais: Fortran é uma linguagem de difícil análise léxica, devido ao controle das linhas e das colunas dos programas e outras coisas mais Fortran é uma linguagem de difícil análise léxica, devido ao controle das linhas e das colunas dos programas e outras coisas mais É mais fácil fazer um analisador manual do que usar um gerador automático É mais fácil fazer um analisador manual do que usar um gerador automático