Análise Sintática - Continuação

Slides:



Advertisements
Apresentações semelhantes
Software Básico Silvio Fernandes
Advertisements

Tópicos em Compiladores
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.
III – Análise sintáctica
III – Análise sintáctica
III – Análise sintáctica Parsers ascendentes Instruções shift-reduce Bibliografia aconselhada: –Aho, Sethi e Ullman – secção 4.5 LFA 1999/ Jorge.
III – Análise sintáctica
III – Análise sintáctica
Compiladores I Cristiano Damiani Vasconcellos
Prof. Yandre Maldonado e Gomes da Costa
Teoria da Computação FIC– Ciência da Computação
Compiladores FIC– Ciência da Computação Professor: Ciro Meneses Santos
Deyvisson, Rafael M.P., Renato, Robson C.F., Rodolfo
Análise Sintática Ascendente ­
Compiladores Prof. Yandre Maldonado Compiladores - Prof. Yandre - 1.
Introdução à Compilação Prof. Leandro Magno Slides adaptados a partir do material cedido pelos professores Heloise Manica Paris Teixeira, Yandre M. G.
Prof. Heloise Manica Paris Teixeira
Profa. Heloise Manica Paris Teixeira
Análise Sintática - Continuação
Algoritmos e Programação Estruturada Conceitos básicos
esquerda p/ direita,read only
Análise Dada uma cadeia de terminais w, queremos saber se wL(G) ou não. Se for o caso, poderemos querer achar uma derivação de w. Um algoritmo que pode.
Identificando Linguagens Não Regulares
Introdução à Lógica de Programação (cont.)
YACC.
Análise Sintática Ascendente
Relações em uma Gramática
Construção de Compiladores
Construção de Compiladores
Construção de Compiladores
5.6 – Complementos de Yacc – Usando Yacc com gramáticas ambíguas
Prof. Bruno Moreno Aula 4 – 11/03/2011
T ÓPICOS DE I.A. Métodos de Busca Busca em Espaços de Estado Prof. Mário Dantas.
Compiladores, Aula Nº 19 João M. P. Cardoso
Gramáticas Livres de Contexto
Erick Vagner Cabral Igor Lucena Vitor Baptista
Análises léxica e sintática
Expressões Regulares e Gramáticas
Aulão de Linguagens Formais e Compiladores
Capítulo II Gramáticas e Linguagens
Analise sintática aula-07-analise-sintática.pdf.
Esquemas L-atribuídos
Análise Sintática LR Prof. Alexandre Monteiro
Análises léxica e sintática
Projeto de Tradutor Preditivo. Introdução Introdução Esquemas L-atribuidos são reconhecidos por analisadores Top-Down. Entre estes analisadores, se encontra.
Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso.
Análise Sintática Prof. Alexandre Monteiro
Tradução Dirigida por Sintaxe
Aula 18 1 Análise Sintáctica Compiladores, Aula Nº 18 João M. P. Cardoso.
LFA: Unidade 03 – Parte B Engenharia/Ciência da Computação
Mas para que serve um analisador sintático? Verificar se a estrutura gramatical do programa está correta Escrito de outra forma: O texto segue as regras.
Revisão Compiladores – AP2
Análise Sintática de Descida Recursiva
Compiladores Análise Sintática
Faculdade Pernambucana - FAPE Setembro/2007
Prof. André Luis Roland Tancredo Engenheiro da Computação e Pesquisador em Desenvolvimento Tecnológico para Semicondutores pelo CNPq Especialista em Microeletrônica.
COMPILADORES 04 Prof. Marcos.
Fundamentos de linguagens de programação
Sumário 1 SQL Embutida 2 Processamento de Consultas
Computabilidade e Linguagens Formais
Algoritmos e Programação I
Sintaxe de uma Linguagem
tópicostópicos itens 01. Terminologia 02. Operações básicas 03. Representação de linguagens 04. Formalização de gramáticas 05. Processo de derivação 06.
Analisador sintático: Tipos de análises sintáticas
Prof. Edison Oliveira de Jesus
Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007.
Informática Teórica Engenharia da Computação. Teoria da Computação Contexto do que vamos começar a estudar As linguagens também podem ser definidas formalmente.

Análise Sintática Recursiva e Preditiva
Transcrição da apresentação:

Análise Sintática - Continuação Parte 3 Profa. Heloise Manica Paris Teixeira Slides cedidos pela Prof. Valéria Feltrin (DIN-UEM)

Análise sintática Analisadores Sintáticos Descendente (Top-down)‏ Do símbolo de partida para a sentença Da sentença para o simbolo de partida Descendente (Top-down)‏ Ascendente (Bottom-up)‏ Com retrocesso (back track)‏ Sem retrocesso (preditive) Um analisador preditivo tenta prever a construção seguinte da cadeia de entrada com base em uma ou mais marcas de verificação à frente

Análise sintática Descendente Sem Retrocesso (Preditiva)

ASD Preditiva ASD preditiva Algoritmos: Sabe-se de antemão qual regra aplicar Algoritmos: LL(1) O primeiro “L” se refere ao fato de o processamento ocorrer da esquerda para a direita (Left) O segundo “L” se refere ao fato de o analisador acompanhar uma derivação à esquerda para a cadeia de entrada. O número (1) significa que é usado um símbolo da entrada para prever a direção da análise. LL(1)Recursivo Ambos algoritmos exigem, em geral, a computação dos conjuntos de verificação Primeiro (First) e de Seqüência (Follow)

ASD Preditiva Recursiva Um analisador sintático recursivo é um conjunto de procedimentos possivelmente recursivos, um para cada não terminal a ser derivado Também chamado de analisador de “descida recursiva” Cada regra gramatical para um A não terminal é vista como uma definição de um procedimento, em que o lado direito de A especifica o código para esse procedimento

ASD preditiva recursiva Exemplo E  T + E | T T  F * T | F F  a | b | (E) procedimento ASD início prox_token(); E; fim procedimento F início se ( token ='(‘ ) então    prox_token();    E;    se (token =')‘) então prox_token()       senão ERRO; senão se (token =‘a‘) ou (token =‘b‘) então prox_token()    senão ERRO; fim procedimento E início T; se (token='+‘) então prox_token(); E; fim procedimento T início F; se (token =‘*‘) então       prox_token(); T; fim

ASD preditiva recursiva Método formal para gerar os procedimentos Regras de transformação: mapeamento das regras de um não terminal em grafos sintáticos Também podem ser usados diagramas de transição (Aho et al., 1995, pg82) Regras de tradução: mapeamento dos grafos em procedimentos Exemplo S  aAd A cA | eB B f | g a A S: Grafo sintático Símbolo terminal Símbolo não terminal

ASD preditiva recursiva S  aAd a A d S procedimento S início se (token =‘a’) então prox_token(); A; se (token =‘d’) então prox_token() senão ERRO; fim

ASD preditiva recursiva A  cA | eB c A procedimento A início se (token =‘c’) então prox_token(); A; senão se (token =‘e’) então B; senão ERRO; fim A e B

ASD preditiva recursiva B  f | g f B g procedimento B início se (token =‘f’) ou (token =‘g’) então prox_token() senão ERRO; fim

ASD preditiva recursiva Programa principal procedimento ASD início prox_token();    S;    se (terminou_cadeia) então SUCESSO     senão ERRO fim Geralmente, concatenamos um símbolo $ no fim da cadeia antes do seu reconhecimento. terminou_cadeia é a verificação da condição token = $

ASD preditiva recursiva Regras de transformação Regras gramaticais  grafos sintáticos Toda regra da gramática é mapeada em um grafo Toda ocorrência de um terminal x corresponde ao seu reconhecimento na cadeia de entrada e a leitura do próximo símbolo dessa cadeia x

ASD preditiva recursiva Toda ocorrência de um não-terminal A corresponde a análise imediata de A Alternativas são representadas como A A B C

ASD preditiva recursiva Uma seqüência A B C é mapeada em A forma A* é representada por A B C A

ASD preditiva recursiva Exercício: Faça o grafo sintático da gramática abaixo: A  x | (B) B  AC C  +AC | ε ( B ) A x B A C C A +

ASD preditiva recursiva Os grafos sintáticos podem ser simplificados transformar chamadas recursivas em loops Os grafos simplificados devem ser equivalentes aos grafos originais As simplificações nos grafos vão se refletir no código gerado para cada grafo

ASD preditiva recursiva Exemplo: Simplifique o grafo abaixo para C  +AC | ε C A + C A +

ASD preditiva recursiva Regras de tradução Grafos sintáticos  procedimentos Reduzir o número de grafos: união de grafos para maior simplicidade e eficiência

ASD preditiva recursiva Faça a união dos grafos abaixo. Se possível, simplifique após a união. E T E’ T + E E’ T + + E T

ASD preditiva recursiva 2. Escrever um procedimento para cada grafo A seqüência origina o procedimento início A; B; C; fim A B C

ASD preditiva recursiva A alternativa origina o procedimento início se (token está em Primeiro(A)) então A senão se (token está em Primeiro(B)) então B senão se (token está em Primeiro(C)) então C fim A B C

ASD preditiva recursiva Uma repetição origina o procedimento início enquanto (token está em Primeiro(A)) faça A; fim A

ASD preditiva recursiva O terminal origina início se (token = x) então prox_token() senão ERRO; fim x

ASD preditiva recursiva O não terminal origina início A; fim A

ASD preditiva recursiva Exercício: fazer o(s) procedimento(s) para os grafos sintáticos Se possível, reduza o no de grafos ( B ) A x B A C A + C

ASD preditiva recursiva ( B ) A x Redução dos grafos ( B ) A x + B A C A + C

ASD preditiva recursiva Redução dos grafos ( B ) A x + ( ) A x +

ASD preditiva recursiva procedimento A início se (token =‘x’) então prox_token() senão se (token =‘(‘) então faça prox_token(); A; até (token <>’+’); se (token =‘)’) então prox_token() senão ERRO; fim ( ) A x +