Software Básico Silvio Fernandes

Slides:



Advertisements
Apresentações semelhantes
AULA 01 PROGRAMAÇÃO DINÂMICA
Advertisements

Programação em Java Prof. Maurício Braga
Software Básico Silvio Fernandes
Software Básico Silvio Fernandes Universidade Federal Rural do Semiárido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula 05:
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Ambientais Ciência da Computação Aula 06: Funções.
5.5 – Análise Bottom-Up Tentativa de construir uma árvore sintática para a sentença analisada, começando das folhas, indo em direção à raiz (pós-ordem.
Teoria da Computação MÁQUINA DE TURING (Continuação) Fabrício Dias
II – Análise léxica DEI Papel do analisador léxico.
I - Noções dum compilador
III – Análise sintáctica
VETORES.
Deyvisson, Rafael M.P., Renato, Robson C.F., Rodolfo
Ciclos, Vectores e Gráficos Simulação da Queda de Corpos II
Universidade Bandeirante de São Paulo Fundamentos da Álgebra
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Ambientais Ciência da Computação Aula 03: Computador.
Software Básico Silvio Fernandes
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
Software Básico Silvio Fernandes Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Aula.
Software Básico Silvio Fernandes
Algoritmos e Programação Linguagens de Programação Teoria Aula 5 (05/05) Universidade Federal do Vale do São.
Gerenciamento de Arquivos, Páginas e Registros
Análise Sintática - Continuação
Árvores.
EXPRESSÕES ARITMÉTICAS
EXPRESSÕES ARITMÉTICAS
Estatística Básica Utilizando o Excel
Linguagens Livres de Contexto
Recursividade Conceitos e Aplicações.
Polinômios Prof. Marlon.
EQUAÇÕES POLINOMIAIS Prof. Marlon.
Curso Sistemas de Informação Disciplina: Arquitetura de Software
Análise Sintática Ascendente
Relações em uma Gramática
Universidade Federal da Paraíba Departamento de Informática Construção de Compiladores Verificação de Tipos.
Construção de Compiladores
Construção de Compiladores
Construção de Compiladores
Construção de Compiladores
Programação Baseada em Objectos Desenho de TAD
Revisão do conceito de matrizes
Semana 03: Comandos de desvio de fluxo. Expressões lógicas.
Derivada e integral de uma função
Inteligência Artificial
PROGRAMAÇÃO I UNIDADE 1.
Aula prática 6 Vetores e Matrizes
Salas de Matemática.
Aula 08 Medidas de posição - Prof. Diovani Milhorim
Aula 17 1 Análise Sintáctica Compiladores, Aula Nº 17 João M. P. Cardoso.
Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat
Rotação Simples e Dupla Katia Guimarães
1 2 Observa ilustração. Cria um texto. Observa ilustração.
Campus de Caraguatatuba Aula 8: Noções Básicas sobre Erros (2)
Capítulo II Gramáticas e Linguagens
Campus de Caraguatatuba Aula 2: Somatório e Produtório
Analise sintática aula-07-analise-sintática.pdf.
Campus de Caraguatatuba
Planilha Eletrônica - Excel
Campus de Caraguatatuba Aula 9: Noções Básicas sobre Erros (3)
Fontes de Erros Aula 1 Introdução; Erros em processos numéricos;
Análise Sintática Prof. Alexandre Monteiro
Faculdade Pernambucana - FAPE Setembro/2007
Fundamentos de linguagens de programação
Sintaxe de uma Linguagem
Analisador sintático: Tipos de análises sintáticas
Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007.
Transcrição da apresentação:

Software Básico Silvio Fernandes 2009.1 Universidade Federal Rural do Semi-Árido Departamento de Ciências Exatas e Naturais Ciência da Computação Software Básico Aula 19: Introdução aos compiladores II Silvio Fernandes 2009.1

Análise Sintática Durante a análise sintática, as instruções originais escritas pelo programador são reconhecidas como construtores da linguagem segundo a gramática que está sendo utilizada As técnicas podem ser: Bottom-up Top-down

Análise Sintática Bottom-up Top-down Partem dos nós finais (instruções que estão sendo analisadas) e tentam combiná-las em nós cada vez mais altos, até chegar à raiz Top-down partem da regra da gramática específica a meta da análise e tentam construir a árvore de modo que os nós finais correspondam às instruções que estão sendo analisadas

Análise Sintática Bottom-up (baixo para cima) A técnica que estudaremos é chamada de método de precedência dos operadores Baseia-se no exame de pares de operadores consecutivos do programa-fonte, e na tomada de decisões sobre a operação que deve ser realizada em 1º lugar Ex: A + B * C - D

Análise Sintática Bottom-up (baixo para cima) A multiplicação e a divisão devem ter uma precedência maior que a soma e a subtração Desse modo + < * * > - Assim A + B * C – D < > Isso significa que B * C tem que ser calculada antes da outras 2 operações da expressão

Análise Sintática Bottom-up (baixo para cima) Em termos de árvore sintática, isso significa que a operação * aparece em um nível inferior a + ou – O 1º passo na construção de um parser com precedência dos operadores é determinar as relações de precedência entre os operadores da gramática Nesse contexto, operador significa qualquer símbolo terminal de modo que teremos também relações de precedência envolvendo tokens

Análise Sintática Bottom-up (baixo para cima) Matriz de precedência para a gramática exemplo

Análise Sintática Bottom-up (baixo para cima) Vemos na matriz que PROGRAM = VAR BEGIN < FOR A relação indica que os 2 tokens têm a mesma precedência e devem ser reconhecidos pelo parser como parte do mesmo construto da linguagem

Análise Sintática Bottom-up (baixo para cima) Observe que não há relação de precedência entre os mesmos tokens Significa que os 2 tokens não podem aparecer juntos numa instrução válida Se uma combinação destas aparecer na análise sintática, ela deverá ser considerada um erro de sintaxe

Análise Sintática Bottom-up (baixo para cima) A fig. a seguir mostra a aplicação do método de análise sintática baseado na precedência dos operadores Na fig. (a) examinamos a instrução READ da linha 9 do programa exemplo A instrução é lida da esquerda para a direita, um token de cada vez, determinando-se a relação de precedência entre cada par de operadores

Análise Sintática Bottom-up (baixo para cima)

Análise Sintática Bottom-up (baixo para cima) O parser identificou a seção da instrução formada pelo token simples id Esse identificador é reconhecido como um fator, <factor>, segundo a Regra 12 Na realidade ele poderia ser também um nome de programa <prog-name> (Regra 2) ou uma lista de identificadores <id-list> (Regra 6)

Análise Sintática Bottom-up (baixo para cima) Numa análise baseada na precedência dos operadores, não é preciso que o parser se preocupe com o significado dos símbolos não terminais que são reconhecidos; Basta que id seja interpretado como um símbolo não terminal <N1> Em geral, os parsers baseados na precedência dos operadores usam uma pilha para guardar os tokens lidos mas ainda não analisados, de modo que possam ser reexaminados

Análise Sintática Top-down Conhecido como descida recursiva Têm uma procedure para cada símbolo não terminal da gramática Quando uma procedure é chamada, ela tenta encontrar uma substring da entrada que se inicie pelo token atual e que possa ser interpretado como o símbolo não terminal ao qual a procedure está associada

Análise Sintática Top-down Nesse processo, ela pode chamar outras procedures ou até, chamar a si mesma recursivamente na procura de outros símbolos não terminais Quando uma procedure encontra o símbolo não terminal que está procurando, ela informa à rotina anterior que a pesquisa foi bem-sucedida e faz avançar o ponteiro de token para além da substring que acabou de ser reconhecida

Análise Sintática Top-down Se a procedure não conseguir encontrar uma substring que possa ser interpretada como o símbolo não terminal que estava procurando, ela informa que a pesquisa foi malsucedida ou chamará uma rotina de diagnóstico e recuperação

Análise Sintática Top-down Quando a gramática oferece diversas possibilidades para um símbolo não terminal, a procedure precisa decidir qual delas será examinada A decisão pode ser tomada com base no exame do próximo token Ex: na procedure <stmt> se o próximo token for READ, ela chamará a proc. <read>; se for id, ela chamará <assign>

Análise Sintática Top-down Se tentássemos escrever um conjunto completo de procedures para a gramática apresentada, descobriríamos um problema A <id-list> (regra 6) não conseguiria decidir entre suas 2 alternativas pois tanto id quanto <id-list> podem começar por id Ela pode levar a uma recursividade indefinada O motivo está em que uma das alternativas de <id-list> se inicia por <id-list>

Análise Sintática Top-down Os analisadores sintáticos top-down não podem ser utilizados com uma gramática que contenha este tipo de recursão imediata à esquerda O mesmo problema aconteceria com relação às regras 3, 7, 10 e 11 A figura a seguir mostra a gramática sem recursão à esquerda

Análise Sintática

Análise Sintática Top-down A regra 6a <id-list> ::= id {, id} É uma extensão comum da BNF, define <id-list> como sendo composta por um id seguido de zero ou mais ocorrências de “, id” Nessa definição é procurado um id, e continua lendo a entrada enquanto os 2 tokens forem uma vírgula e um id Assim se elimina o problema da recursão à esquerda e também a dificuldade de decisão entre as alternativas de <id-list>

Análise Sintática Top-down Modificações semelhantes foram feitas nas regras 3a, 7a, 10a, 11a Repare que a gramática continua sendo recursiva Isto significa que as chamada recursivas entre as procedures do parser continuam sendo possíveis Entretanto, a recursão direta à esquerda desapareceu

Análise Sintática Top-down Na figura a seguir temos a representação gráfica do método de descida recursiva para a instrução que está sendo analisada Na parte (i), a procedure READ foi chamada e examinou os tokens READ e ( Na parte (ii), READ chamou IDLIST, que examinou o token id Na parte (iii), IDLIST voltou a READ com a indicação que foi bem-sucedida; em seguida, READ examinou o token ) Com isso, termina a análise da instrução

Análise Sintática

Análise Sintática Top-down O exemplo visto utiliza apenas instruções isoladas Entretanto, a mesma técnica poderia ser aplicada a programas completos A análise sintática consistiria apenas na chamada da procedure referente a <prog> As chamadas feitas por <prog> criariam a árvore sintática do programa

Análise Sintática Nenhuma característica inerente às linguagens de programação nos obriga a utilizar uma ou outra técnica de análise sintática Usamos um método bottom-up e um top-down para analisar o mesmo programa, usando praticamente a mesma gramática Seria possível, inclusive, combinar as 2 técnicas

Referências Leland L Beck. “Desenvolvimento de software básico”. 2ª ed. Rio de Janeiro: Campus, 1993. 525p.